From a1f83fefcdccec9117e7f6442bb0b8f1f9243af3 Mon Sep 17 00:00:00 2001 From: ladeng07 <40017222+ladeng07@users.noreply.github.com> Date: Wed, 11 May 2022 02:34:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=A4=A7=E9=83=A8?= =?UTF-8?q?=E5=88=865=E6=9C=886=E6=97=A5=E5=AD=A6=E9=95=BF=E4=BB=AC?= =?UTF-8?q?=E5=8F=91=E7=8E=B0=E7=9A=84bug=E3=80=82=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E4=BA=86.venv=E5=92=8C.idea=E6=96=87=E4=BB=B6=E5=A4=B9?= =?UTF-8?q?=E3=80=82=20=E5=AF=B9=E6=95=B0=E6=8D=AE=E8=A1=A8=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=BA=86=E9=87=8D=E6=9E=84=EF=BC=8C=E9=83=A8=E9=97=A8?= =?UTF-8?q?=E9=83=A8=E5=88=86=E4=BB=A3=E7=A0=81=E9=87=8D=E6=9E=84by=20?= =?UTF-8?q?=E8=80=81=E5=AD=9F=20=E5=88=9D=E6=AD=A5=E5=B0=86=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E4=BF=A1=E6=81=AF=E7=A1=AC=E7=BC=96=E7=A0=81=E7=A7=BB?= =?UTF-8?q?=E9=99=A4=20=E6=B7=BB=E5=8A=A0=E4=BA=86requirements=20=E7=BB=99?= =?UTF-8?q?=E6=96=B0=E7=94=9F=E5=A2=9E=E5=8A=A0=E4=BA=86=E6=80=A7=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ITShowPlatform/settings.py | 139 +++++++++++--- apps/comments/serializers.py | 8 +- apps/comments/urls.py | 2 +- apps/comments/views.py | 29 ++- apps/enroll/serializers.py | 20 +- apps/enroll/views.py | 23 ++- apps/history/admin.py | 1 + apps/history/serializers.py | 272 +++++++++------------------ apps/work/migrations/0001_initial.py | 7 +- apps/work/serializers.py | 11 +- apps/work/urls.py | 2 +- apps/work/views.py | 19 +- utils/get_error_msg.py | 30 --- 13 files changed, 271 insertions(+), 292 deletions(-) delete mode 100644 utils/get_error_msg.py diff --git a/ITShowPlatform/settings.py b/ITShowPlatform/settings.py index e749182..6b98623 100644 --- a/ITShowPlatform/settings.py +++ b/ITShowPlatform/settings.py @@ -1,32 +1,20 @@ -""" -Django settings for ITShowPlatform project. - -Generated by 'django-admin startproject' using Django 4.0.4. - -For more information on this file, see -https://docs.djangoproject.com/en/4.0/topics/settings/ - -For the full list of settings and their values, see -https://docs.djangoproject.com/en/4.0/ref/settings/ -""" - from pathlib import Path import os import configparser +import logging # Build paths inside the project like this: BASE_DIR / 'subdir'. BASE_DIR = Path(__file__).resolve().parent.parent conf = configparser.RawConfigParser() -conf.read(str(BASE_DIR)+r"\config.ini",encoding="utf-8") - +conf.read(os.path.join(BASE_DIR, "config.ini"), encoding="utf-8") # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/4.0/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! -SECRET_KEY = 'django-insecure-0cn#v4ei2(^n+txyh4%3d5sllz6mknz#7t$!cq-d!ly*_rwvh2' +SECRET_KEY = conf.get("Django", "SECRET_KEY"), # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True @@ -36,8 +24,8 @@ ALLOWED_HOSTS = ["*"] # Application definition - INSTALLED_APPS = [ + 'corsheaders', 'simpleui', 'django.contrib.admin', 'django.contrib.auth', @@ -57,10 +45,12 @@ MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', - #'django.middleware.csrf.CsrfViewMiddleware', + # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'corsheaders.middleware.CorsMiddleware', + 'django.middleware.common.CommonMiddleware', ] ROOT_URLCONF = 'ITShowPlatform.urls' @@ -88,15 +78,14 @@ WSGI_APPLICATION = 'ITShowPlatform.wsgi.application' # https://docs.djangoproject.com/en/4.0/ref/settings/#databases DATABASES = { - 'default': { - 'ENGINE': conf.get("database","ENGINE"), - 'NAME': conf.get("database","NAME"), - 'USER': conf.get("database","USER"), - 'PASSWORD': conf.get("database","PASSWORD"), + 'default': { + 'ENGINE': conf.get("database", "ENGINE"), + 'NAME': conf.get("database", "NAME"), + 'USER': conf.get("database", "USER"), + 'PASSWORD': conf.get("database", "PASSWORD"), } } - # Password validation # https://docs.djangoproject.com/en/4.0/ref/settings/#auth-password-validators @@ -148,10 +137,102 @@ REST_FRAMEWORK = { ) } -EMAIL_HOST = conf.get('email',"EMAIL_HOST") # 服务器 -EMAIL_PORT = conf.get("email","EMAIL_PORT") -EMAIL_HOST_USER = conf.get("email","EMAIL_HOST_USER") # 账号 -EMAIL_HOST_PASSWORD = conf.get("email","EMAIL_HOST_PASSWORD") # 密码 (注意:这里的密码指的是授权码) -EMAIL_USE_SSL = conf.get("email","EMAIL_USE_SSL") # 一般都为False -EMAIL_FROM = conf.get("email","EMAIL_FROM") # 邮箱来自 +EMAIL_HOST = conf.get('email', "EMAIL_HOST") # 服务器 +EMAIL_PORT = int(conf.get("email", "EMAIL_PORT")) +EMAIL_HOST_USER = conf.get("email", "EMAIL_HOST_USER") # 账号 +EMAIL_HOST_PASSWORD = conf.get("email", "EMAIL_HOST_PASSWORD") # 密码 (注意:这里的密码指的是授权码) +EMAIL_USE_SSL = bool(conf.get("email", "EMAIL_USE_SSL")) # 一般都为False +EMAIL_FROM = conf.get("email", "EMAIL_FROM") # 邮箱来自 +print(conf.get('email', "EMAIL_HOST"), conf.get("email", "EMAIL_PORT"), conf.get("email", "EMAIL_HOST_USER"), + conf.get("email", "EMAIL_HOST_PASSWORD")) +ADMINS = ( + ('ladeng', '2312936963@qq.com'), +) +MANAGERS = ADMINS + +# 创建log文件的文件夹 +LOG_DIR = os.path.join(BASE_DIR, "logs") +if not os.path.exists(LOG_DIR): + os.mkdir(LOG_DIR) + +# 基本配置,可以复用的 +LOGGING = { + "version": 1, + "disable_existing_loggers": False, # 禁用已经存在的logger实例 + "filters": {"require_debug_false": {"()": "django.utils.log.RequireDebugFalse"}}, + "formatters": { # 定义了两种日志格式 + "verbose": { # 详细 + "format": "%(levelname)s %(asctime)s %(module)s " + "%(process)d %(thread)d %(message)s" + }, + 'simple': { # 简单 + 'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' + }, + }, + "handlers": { # 定义了三种日志处理方式 + "mail_admins": { # 只有debug=False且Error级别以上发邮件给admin + "level": "ERROR", + "filters": ["require_debug_false"], + "class": "django.utils.log.AdminEmailHandler", + }, + 'file': { # 对INFO级别以上信息以日志文件形式保存 + 'level': "INFO", + 'class': 'logging.handlers.RotatingFileHandler', # 滚动生成日志,切割 + 'filename': os.path.join(LOG_DIR, 'django.log'), # 日志文件名 + 'maxBytes': 1024 * 1024 * 10, # 单个日志文件最大为10M + 'backupCount': 5, # 日志备份文件最大数量 + 'formatter': 'simple', # 简单格式 + 'encoding': 'utf-8', # 放置中文乱码 + }, + "console": { # 打印到终端console + "level": "DEBUG", + "class": "logging.StreamHandler", + "formatter": "verbose", + }, + }, + "root": {"level": "INFO", "handlers": ["console"]}, + "loggers": { + "django.request": { # Django的request发生error会自动记录 + "handlers": ["mail_admins"], + "level": "ERROR", + "propagate": True, # 向不向更高级别的logger传递 + }, + "django.security.DisallowedHost": { # 对于不在 ALLOWED_HOSTS 中的请求不发送报错邮件 + "level": "ERROR", + "handlers": ["console", "mail_admins"], + "propagate": True, + }, + }, +} + +CORS_ALLOW_CREDENTIALS = True +CORS_ORIGIN_ALLOW_ALL = True +CORS_ORIGIN_WHITELIST = ( + ['http://127.0.0.1:*'] +) +CORS_ALLOW_METHODS = ( + 'DELETE', + 'GET', + 'OPTIONS', + 'PATCH', + 'POST', + 'PUT', + 'VIEW', +) + + + +CORS_ALLOW_HEADERS = ( + 'XMLHttpRequest', + 'X_FILENAME', + 'accept-encoding', + 'authorization', + 'content-type', + 'dnt', + 'origin', + 'user-agent', + 'x-csrftoken', + 'x-requested-with', + 'Pragma', +) diff --git a/apps/comments/serializers.py b/apps/comments/serializers.py index 268ab32..0231041 100644 --- a/apps/comments/serializers.py +++ b/apps/comments/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers from .models import * -from utils.get_error_msg import get_error_msg +from utils.get_msg import get_msg class CommentsInfo(serializers.ModelSerializer): @@ -16,13 +16,13 @@ class CommentsInfo(serializers.ModelSerializer): ban = ['!', '@', '#', '$', '%', '^', '&', '*', '(', ')', "_", "-"] for i in ban: if i in value: - raise serializers.ValidationError(code='40002', detail={'msg': get_error_msg(40002), + raise serializers.ValidationError(code='40002', detail={'msg': get_msg(40002), "code": '40002'}) if len(value) > 50: - raise serializers.ValidationError(code='40003', detail=get_error_msg(40003)) + raise serializers.ValidationError(code='40003', detail=get_msg(40003)) elif len(value) == 0: - raise serializers.ValidationError(code='40004', detail=get_error_msg(40004)) + raise serializers.ValidationError(code='40004', detail=get_msg(40004)) return value diff --git a/apps/comments/urls.py b/apps/comments/urls.py index 3dff894..70307fc 100644 --- a/apps/comments/urls.py +++ b/apps/comments/urls.py @@ -2,7 +2,7 @@ from django.urls import path from . import views urlpatterns = [ - path('comment/', views.comments.as_view()), + path('comment/', views.CommentView.as_view()), ] diff --git a/apps/comments/views.py b/apps/comments/views.py index a587bde..054bc86 100644 --- a/apps/comments/views.py +++ b/apps/comments/views.py @@ -7,12 +7,13 @@ from rest_framework.response import Response from .models import * from .serializers import CommentsInfo from django.utils import timezone -from utils.get_error_msg import get_error_msg +from utils.get_msg import get_msg +from django.views.decorators.csrf import csrf_exempt # Create your views here. -class comments(APIView): - +class CommentView(APIView): + """获取弹幕的内容""" def get(self, request): data = {} queryset = Comments.objects.all() @@ -22,25 +23,35 @@ class comments(APIView): except: data['msg'] = serializer.error_messages if len(data['data']) == 0: - data['msg'] = get_error_msg(40005) + """如果没有获取到数据""" + data['msg'] = get_msg(40005) data['code'] = 40005 else: - data['msg'] = get_error_msg(20000) + data['msg'] = get_msg(20000) data['code'] = 20000 return Response(data=data) - + """接收新弹幕""" + @csrf_exempt def post(self, request): data = {} serializer = CommentsInfo(data=request.data) if not serializer.is_valid(raise_exception=True): - data['msg'] = serializer.error_messages + data['msg'] = get_msg(50000) data['code'] = 50000 return Response(data=data) + try: + length = serializer.validated_data['content'] + data['msg'] = "success" + data['code'] = 20000 + except KeyError: + data['code'] = 42003 + data['msg'] = get_msg(42003) + return Response(data=data) + """时间不用保存到毫秒""" serializer.validated_data['post_time'] = timezone.now().replace(microsecond=0) serializer.save() data['data'] = serializer.validated_data - data['msg'] = "success" - data['code'] = 20000 + return Response(data=data) diff --git a/apps/enroll/serializers.py b/apps/enroll/serializers.py index 0c4949f..2edcee9 100644 --- a/apps/enroll/serializers.py +++ b/apps/enroll/serializers.py @@ -3,7 +3,7 @@ from rest_framework.validators import UniqueValidator from apps.enroll.models import NewMember, EmailVerifyRecord from apps.history.models import Department import time -from utils.get_error_msg import get_error_msg +from utils.get_msg import get_msg class DepartmentSerializer(serializers.ModelSerializer): @@ -21,16 +21,16 @@ class NewMemberSerializer(serializers.ModelSerializer): email = serializers.EmailField(validators=[ UniqueValidator( queryset=NewMember.objects.all(), - message=get_error_msg(43032) + message=get_msg(43032) ) ]) phone_number = serializers.CharField(validators=[ UniqueValidator( queryset=NewMember.objects.all(), - message=get_error_msg(43033) + message=get_msg(43033) ), ], - max_length=11, error_messages={"max_length": get_error_msg(42033)} + max_length=11, error_messages={"max_length": get_msg(42033)} ) class Meta: @@ -40,17 +40,17 @@ class NewMemberSerializer(serializers.ModelSerializer): extra_kwargs = { "name": { "error_messages": { - "max_length": get_error_msg(42034) + "max_length": get_msg(42034) } }, "major": { "error_messages": { - "max_length": get_error_msg(42035) + "max_length": get_msg(42035) } }, "department_cn": { "error_messages": { - "invalid_choice": get_error_msg(42036) + "invalid_choice": get_msg(42036) } }, @@ -72,8 +72,8 @@ class SendEmailSerializer(serializers.Serializer): email = serializers.EmailField(max_length=50, validators=[UniqueValidator( queryset=NewMember.objects.all(), - message=get_error_msg(43032))], - error_messages={"max_length": get_error_msg(42032), "invalid": get_error_msg(44036)}) + message=get_msg(43032))], + error_messages={"max_length": get_msg(42032), "invalid": get_msg(44036)}) def validate_email(self, data): @@ -85,7 +85,7 @@ class SendEmailSerializer(serializers.Serializer): now = time.time() # print(f"now={now},send={send_time}") if now - send_time < 120: - raise serializers.ValidationError(code="verification_code", detail=get_error_msg(44033)) + raise serializers.ValidationError(code="verification_code", detail=get_msg(44033)) else: # print(oj.email) oj.delete() diff --git a/apps/enroll/views.py b/apps/enroll/views.py index c71ba4e..3889091 100644 --- a/apps/enroll/views.py +++ b/apps/enroll/views.py @@ -7,7 +7,8 @@ from apps.enroll.serializers import DepartmentSerializer, NewMemberSerializer, N from rest_framework import status from rest_framework.views import APIView from apps.enroll.email import send_code_email -from utils.get_error_msg import get_error_msg +from django.views.decorators.csrf import csrf_exempt +from utils.get_msg import get_msg import re import time @@ -22,8 +23,8 @@ class DepartmentMessageView(GenericAPIView): serializer = self.get_serializer(instance=self.get_queryset(), many=True) # print(request.query_params) if request.query_params: - return Response({"code": 40000, "msg": get_error_msg("40000")}) - return Response({"code": 20000, "msg": get_error_msg("20000"), "data": serializer.data}) + return Response({"code": 40000, "msg": get_msg("40000")}) + return Response({"code": 20000, "msg": get_msg("20000"), "data": serializer.data}) class SignUpView(GenericAPIView): @@ -36,6 +37,7 @@ class SignUpView(GenericAPIView): serializer_class = NewMemberSerializer queryset = NewMember.objects.all() + @csrf_exempt def post(self, request): data = request.data serializer = self.get_serializer(data=data) @@ -50,16 +52,16 @@ class SignUpView(GenericAPIView): now = time.time() if now - send_time > 120: return Response( - {"code": 40000, "msg": {"verification_code": get_error_msg(45032)}}, + {"code": 40000, "msg": {"verification_code": get_msg(45032)}}, status=status.HTTP_400_BAD_REQUEST) if code != oj.code: - return Response({"code": 45031, "msg": {"verification_code": get_error_msg(44031)}}, + return Response({"code": 45031, "msg": {"verification_code": get_msg(44031)}}, status=status.HTTP_400_BAD_REQUEST) except EmailVerifyRecord.DoesNotExist: - return Response({"code": 44032, "msg": {"verification_code": get_error_msg(44032)}}, + return Response({"code": 44032, "msg": {"verification_code": get_msg(44032)}}, status=status.HTTP_400_BAD_REQUEST) serializer.save() - return Response({"code": 20000, "msg": get_error_msg(20000)}) + return Response({"code": 20000, "msg": get_msg(20000)}) else: error = {} for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()): @@ -76,15 +78,16 @@ class SignUpView(GenericAPIView): else: queryset = self.get_queryset().get(id=-1) except NewMember.DoesNotExist: - return Response({"code": 40000, "msg": get_error_msg(45030)}) + return Response({"code": 40000, "msg": get_msg(45030)}) serializer = NewMemberScheduleSerializer(instance=queryset) - return Response({"code": 20000, "msg": get_error_msg(20000), "data": serializer.data}) + return Response({"code": 20000, "msg": get_msg(20000), "data": serializer.data}) class SendEmailView(APIView): """发送邮件""" + @csrf_exempt def post(self, request): data = request.data serializer = SendEmailSerializer(data=data) @@ -93,7 +96,7 @@ class SendEmailView(APIView): if ret: # serializer.save() send_code_email(data.get("email")) - return Response({"code": 20000, "msg": get_error_msg(20000)}) + return Response({"code": 20000, "msg": get_msg(20000)}) else: error = {} for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()): diff --git a/apps/history/admin.py b/apps/history/admin.py index 08203f1..d41a0e2 100644 --- a/apps/history/admin.py +++ b/apps/history/admin.py @@ -5,3 +5,4 @@ from .models import * admin.site.register(Department) admin.site.register(History) admin.site.register(Members) +#admin.site.register(DepartmentName) diff --git a/apps/history/serializers.py b/apps/history/serializers.py index 035fd9b..ad69345 100644 --- a/apps/history/serializers.py +++ b/apps/history/serializers.py @@ -1,27 +1,24 @@ import re from rest_framework import serializers - from apps.history import * from apps.history.models import Department, Members, History -# def validate_department(value): -# reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') -# if not reg.match(value): -# raise serializers.ValidationError("42011-部门名称中只能输入汉字或英文") -# -# -# def validate_department_en(value): -# reg = re.compile(r'^[A-Za-z][A-Za-z\s]*$') -# if not reg.match(value): -# raise serializers.ValidationError("42010-部门英文名称中只能输入英文") -# -# -# def name_validate(value): -# reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') -# if not reg.match(value): -# raise serializers.ValidationError("42012-姓名只能输入汉字或英文") +def validate_department(value): + reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') + if not reg.match(value): + raise serializers.ValidationError("42011-部门名称中只能输入汉字或英文") +def validate_department_en(value): + reg = re.compile(r'^[A-Za-z][A-Za-z\s]*$') + if not reg.match(value): + raise serializers.ValidationError("42010-部门英文名称中只能输入英文") + + +def name_validate(value): + reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') + if not reg.match(value): + raise serializers.ValidationError("42012-姓名只能输入汉字或英文") # # def validate_avatar(value): @@ -29,188 +26,91 @@ from apps.history.models import Department, Members, History # return s -# class DepartmentSerializer(serializers.Serializer): -# did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'}) -# department_cn = serializers.CharField(max_length=10, required=True, trim_whitespace=True, -# validators=[validate_department], -# error_messages={"max_length": '42021-部门名称长度过长', "blank": '41011-部门名称不能为空'}) -# department_en = serializers.CharField(max_length=30, required=True, trim_whitespace=True, -# validators=[validate_department_en], -# error_messages={"max_length": '42022-部门英文名称长度过长', -# "blank": '41012-部门英文名称不能为空'}) -# content = serializers.CharField(max_length=800, required=True, trim_whitespace=True, -# error_messages={"max_length": '42023-内容过长', "blank": '41013-内容不能为空'}) -# introduction = serializers.CharField(max_length=800, required=True, trim_whitespace=True, -# error_messages={"max_length": '42024-介绍内容过长', "blank": '41014-介绍内容不能为空'}) -# -# # class Meta: -# # model = Department -# # fields = ('did', 'department_en', 'department_cn', 'part', 'title', 'content') -# -# def create(self, validated_data): -# return Department.objects.create(**validated_data) -# -# def update(self, instance, validated_data): -# instance.content = validated_data.get("content", instance.content) -# instance.department_cn = validated_data.get("department_cn", instance.department_cn) -# instance.department_en = validated_data.get("department_en", instance.department_en) -# instance.id = validated_data.get("id", instance.id) -# instance.title = validated_data.get("title", instance.title) -# instance.part = validated_data.get("part", instance.part) -# instance.save() -# return instance +class DepartmentSerializer(serializers.Serializer): + did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'}) + department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, + validators=[validate_department], + error_messages={"max_length": '42021-部门名称长度过长', "blank": '41011-部门名称不能为空'}) + department_en = serializers.CharField(max_length=30, required=True, trim_whitespace=True, + validators=[validate_department_en], + error_messages={"max_length": '42022-部门英文名称长度过长', + "blank": '41012-部门英文名称不能为空'}) + content = serializers.CharField(max_length=800, required=True, trim_whitespace=True, + error_messages={"max_length": '42023-内容过长', "blank": '41013-内容不能为空'}) + introduction = serializers.CharField(max_length=800, required=True, trim_whitespace=True, + error_messages={"max_length": '42024-介绍内容过长', "blank": '41014-介绍内容不能为空'}) -class DepartmentSerializer(serializers.ModelSerializer): - class Meta: - model = Department - fields = "__all__" + # class Meta: + # model = Department + # fields = ('did', 'department_en', 'department', 'part', 'title', 'content') - extra_kwargs = { - "department_cn": { - "error_messages": { - "max_length": '42021-部门名称长度过长', - "blank": '41011-部门名称不能为空' - } - }, - "department_en": { - "error_messages": { - "max_length": '42022-部门英文名称长度过长', - "blank": '41012-部门英文名称不能为空' - } - }, - "content": { - "error_messages": { - "max_length": '42023-内容过长', - "blank": '41013-内容不能为空' - } - }, - "introduction": { - "error_messages": { - "max_length": '42024-介绍内容过长', - "blank": '41014-介绍内容不能为空' - } - } - } + def create(self, validated_data): + return Department.objects.create(**validated_data) - def validate_department_cn(self, data): - reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') - if not reg.match(data): - raise serializers.ValidationError("42011-部门名称中只能输入汉字或英文") - return data - - def validate_department_en(self, data): - reg = re.compile(r'^[A-Za-z][A-Za-z\s]*$') - if not reg.match(data): - raise serializers.ValidationError("42010-部门英文名称中只能输入英文") - return data - - def validate_name(self, data): - reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') - if not reg.match(data): - raise serializers.ValidationError("42012-姓名只能输入汉字或英文") - return data + def update(self, instance, validated_data): + instance.content = validated_data.get("content", instance.content) + instance.department = validated_data.get("department", instance.department) + instance.department_en = validated_data.get("department_en", instance.department_en) + instance.id = validated_data.get("id", instance.id) + instance.title = validated_data.get("title", instance.title) + instance.part = validated_data.get("part", instance.part) + instance.save() + return instance -# class MembersSerializer(serializers.HyperlinkedModelSerializer): -# did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'}) -# department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, -# error_messages={"max_length": '42021-部门名称过长', "blank": '41011-部门名称不能为空'}) -# grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022, -# error_messages={"max_value": '42025-年级数过大', "blank": "41015-年级数不能为空", -# "min_value": '42026-年级数过小'}) -# name = serializers.CharField(required=True, trim_whitespace=True, max_length=6, -# error_messages={"blank": '41016-姓名不能为空', "max_length": '42027-姓名过长'}) -# motto = serializers.CharField(required=False, trim_whitespace=True, max_length=25, validators=[name_validate], -# error_messages={"max_length": '42028-座右铭过长'}) -# -# # avatar = serializers.ImageField(validators=[validate_avatar]) -# -# class Meta: -# model = Members -# fields = ('did', 'department_cn', 'grade', 'name', 'motto') -# -# def create(self, validated_data): -# return Members.objects.create(**validated_data) -# -# def update(self, instance, validated_data): -# instance.did = validated_data.get("did", instance.did) -# instance.department_cn = validated_data.get("department_cn", instance.department_cn) -# instance.grade = validated_data.get("grade", instance.grade) -# instance.name = validated_data.get("name", instance.name) -# instance.motto = validated_data.get("motto", instance.motto) -# instance.avatar = validated_data.get("avatar", instance.avatar) -# instance.save() -# return instance +class MembersSerializer(serializers.HyperlinkedModelSerializer): -class MembersSerializer(serializers.ModelSerializer): - department = serializers.CharField(source="department.department_cn") + did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'}) + department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, + error_messages={"max_length": '42021-部门名称过长', "blank": '41011-部门名称不能为空'}) + grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022, + error_messages={"max_value": '42025-年级数过大', "blank": "41015-年级数不能为空", + "min_value": '42026-年级数过小'}) + name = serializers.CharField(required=True, trim_whitespace=True, max_length=6, + error_messages={"blank": '41016-姓名不能为空', "max_length": '42027-姓名过长'}) + motto = serializers.CharField(required=False, trim_whitespace=True, max_length=25, validators=[name_validate], + error_messages={"max_length": '42028-座右铭过长'}) + # avatar = serializers.ImageField(validators=[validate_avatar]) class Meta: model = Members fields = ('did', 'department', 'grade', 'name', 'motto') - extra_kwargs = { - "did": { - "error_messages": { - "blank": '41010-部门ID不能为空', - "invalid": '42020-类型错误' - } - }, - "department": { - "error_messages": { - "max_length": '42021-部门名称过长', - "blank": '41011-部门名称不能为空' - } - }, - "grade": { - "error_messages": { - "max_value": '42025-年级数过大', - "blank": "41015-年级数不能为空", - "min_value": '42026-年级数过小' - } - }, - "name": { - "error_messages": { - "blank": '41016-姓名不能为空', - "max_length": '42027-姓名过长' - } - }, - "motto": { - "error_messages": { - "max_length": '42028-座右铭过长' - } - } + def create(self, validated_data): + return Members.objects.create(**validated_data) - } + def update(self, instance, validated_data): + instance.did = validated_data.get("did", instance.did) + instance.department = validated_data.get("department", instance.department) + instance.grade = validated_data.get("grade", instance.grade) + instance.name = validated_data.get("name", instance.name) + instance.motto = validated_data.get("motto", instance.motto) + instance.avatar = validated_data.get("avatar", instance.avatar) + instance.save() + return instance -# class HistorySerializer(serializers.Serializer): -# grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022, -# error_messages={"max_value": '42025-年级数过大', "blank": "41015-年级数不能为空", -# "min_value": '42026-年级数过小'}) -# did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'}) -# department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, -# validators=[validate_department], -# error_messages={"max_length": '42021-部门名称过长', "blank": '41011-部门名称不能为空'}) -# -# # class Meta: -# # model = History -# # fields = ('grade', 'did', 'department_cn') -# # -# -# def create(self, validated_data): -# return History.objects.create(**validated_data) -# -# def update(self, instance, validated_data): -# instance.department_cn = validated_data.get("department_cn", instance.department_cn) -# instance.grade = validated_data.get("grade", instance.grade) -# instance.did = validated_data.get("did", instance.did) -# instance.save() -# return instance +class HistorySerializer(serializers.Serializer): -class HistorySerializer(serializers.ModelSerializer): - department = serializers.CharField(source="department.department_cn") + grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022, + error_messages={"max_value": '42025-年级数过大', "blank": "41015-年级数不能为空", + "min_value": '42026-年级数过小'}) + did = serializers.IntegerField(required=True, error_messages={"blank": '41010-部门ID不能为空', "invalid": '42020-类型错误'}) + department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, + validators=[validate_department], + error_messages={"max_length": '42021-部门名称过长', "blank": '41011-部门名称不能为空'}) - class Meta: - model = History - fields = ('years', 'department') + # class Meta: + # model = History + # fields = ('grade', 'did', 'department') + # + + def create(self, validated_data): + return History.objects.create(**validated_data) + + def update(self, instance, validated_data): + instance.department = validated_data.get("department", instance.department) + instance.grade = validated_data.get("grade", instance.grade) + instance.did = validated_data.get("did", instance.did) + instance.save() + return instance diff --git a/apps/work/migrations/0001_initial.py b/apps/work/migrations/0001_initial.py index ce045ea..6c0655a 100644 --- a/apps/work/migrations/0001_initial.py +++ b/apps/work/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 3.2.5 on 2022-05-05 21:56 +# Generated by Django 3.2.5 on 2022-05-07 01:48 from django.db import migrations, models @@ -18,7 +18,10 @@ class Migration(migrations.Migration): ('grade', models.IntegerField(verbose_name='年份')), ('name', models.CharField(max_length=30, verbose_name='事件名称')), ('description', models.CharField(max_length=200, verbose_name='事件描述')), - ('img', models.ImageField(upload_to='image', verbose_name='图片')), + ('img', models.ImageField(blank=True, null=True, upload_to='image', verbose_name='图片')), ], + options={ + 'verbose_name_plural': '部门作品', + }, ), ] diff --git a/apps/work/serializers.py b/apps/work/serializers.py index b576c73..3cfb990 100644 --- a/apps/work/serializers.py +++ b/apps/work/serializers.py @@ -11,8 +11,11 @@ class WorksInfoSerializer(serializers.ModelSerializer): description = serializers.CharField(label="事件描述", max_length=200, required=True) img = serializers.ImageField(label="图片", required=False) - + """用来校验传入年级是否符合规范""" def validate_grade(self, value): - if not (2010 < value <= 2021): - raise serializers.ValidationError("不合法输入") - return value \ No newline at end of file + if not (2002 < value <= 2021): + raise serializers.ValidationError(code='42006', detail={'msg': get_msg(42006), + "code": '42006'}) + return value + + diff --git a/apps/work/urls.py b/apps/work/urls.py index e0fdac6..df47d36 100644 --- a/apps/work/urls.py +++ b/apps/work/urls.py @@ -6,7 +6,7 @@ from ITShowPlatform import settings urlpatterns = [ - path('work/', views.work.as_view()), + path('work/', views.Work.as_view()), ] urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/apps/work/views.py b/apps/work/views.py index de680cd..7bb766d 100644 --- a/apps/work/views.py +++ b/apps/work/views.py @@ -6,15 +6,21 @@ from rest_framework.views import APIView from rest_framework.response import Response from .models import Works from .serializers import WorksInfoSerializer +from utils.get_msg import get_msg +import logging + + # Create your views here. -class work(APIView): +class Work(APIView): + """获取社团历年的作品""" def get(self, request): key = [] data = {"data": key} - for i in range(2012, 2022): + for i in range(2002, 2022): + """temp用来存储每个年级的作品,方便区分年级""" temp = {} try: works_set = Works.objects.filter(grade=i) @@ -24,12 +30,13 @@ class work(APIView): temp['data'] = serializer.data data['data'].append(temp) except Exception: + """如果没有查到数据""" pass if len(data['data']) == 0: - data['code'] = 40000 - data['msg'] = "error" + """如果查找的数据为空""" + data['code'] = 45005 + data['msg'] = get_msg(45005) else: data['code'] = 20000 - data['msg'] = 'success' + data['msg'] = get_msg(20000) return Response(data=data) - diff --git a/utils/get_error_msg.py b/utils/get_error_msg.py deleted file mode 100644 index b233c7b..0000000 --- a/utils/get_error_msg.py +++ /dev/null @@ -1,30 +0,0 @@ -error_set = { - "20000": "成功", - "50000": "意外错误", - "50403": "Forbidden", - "40000": "请求方法错误", - "40001": "JSON解析错误", - - "45030": "信息不存在", - "45032": "邮箱验证码过期", - "44031": "邮箱验证码错误", - "44032": "请先发送验证码", - "43032": "该邮箱已存在", - "43033": "该手机号码已存在", - "42033": "手机号码不合规", - "42034": "姓名过长", - "42035": "说的太多啦", - "42036": "该字段不合规", - "42032": "邮箱过长", - "44033": "请勿频繁发送验证码", - "44036": "请输入正确格式的邮箱", - - "40002": "非法字符", - "40003": "弹幕过长", - "40004": "输入不能为空", - "40005": "返回评论数为0", - "40006": "", -} -def get_error_msg(code="20000"): - - return error_set.get(str(code))