From 14a75d3fdd2cb1fc0d5be9fc601a819efe06f437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=B7=E5=AE=B6=E8=BE=89?= Date: Fri, 29 Apr 2022 20:03:28 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=86=E4=B8=80=E4=B8=8Bse?= =?UTF-8?q?rializers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/ITShowPlatform.iml | 2 +- .idea/deployment.xml | 2 +- .idea/misc.xml | 2 +- .idea/sshConfigs.xml | 2 +- .idea/workspace.xml | 84 ++++++---------------------------------- history/models.py | 2 + history/serializers.py | 51 ++++++++++++++++++++---- history/views.py | 22 +++-------- 8 files changed, 66 insertions(+), 101 deletions(-) diff --git a/.idea/ITShowPlatform.iml b/.idea/ITShowPlatform.iml index e2c7e07..9b31378 100644 --- a/.idea/ITShowPlatform.iml +++ b/.idea/ITShowPlatform.iml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/deployment.xml b/.idea/deployment.xml index fa01f2b..8ff733f 100644 --- a/.idea/deployment.xml +++ b/.idea/deployment.xml @@ -5,7 +5,7 @@ - + diff --git a/.idea/misc.xml b/.idea/misc.xml index 67c853b..6649a8c 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/.idea/sshConfigs.xml b/.idea/sshConfigs.xml index ab0830e..17609e9 100644 --- a/.idea/sshConfigs.xml +++ b/.idea/sshConfigs.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 43975b9..b967d98 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -32,10 +32,15 @@ + + + + - - - + + + + @@ -165,74 +170,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/history/models.py b/history/models.py index e57537c..f90f515 100644 --- a/history/models.py +++ b/history/models.py @@ -5,6 +5,7 @@ from django.core.validators import validate_comma_separated_integer_list class Department(models.Model): did = models.IntegerField("部门ID") department = models.CharField("部门", max_length=10) # 如“程序部” + department_en = models.CharField("部门英文名称", max_length=30) # 如“程序部” part = models.IntegerField("部分", default=0) # 0:内容一;1:内容二 (可能没必要) title = models.CharField("标题", max_length=30) # 如部门介绍/部门要求 content = models.CharField("内容", max_length=1500) # 如部门介绍/部门要求 @@ -26,6 +27,7 @@ class History(models.Model): class Members(models.Model): # 默认id作为成员id + id = models.IntegerField(primary_key=True) avatar = models.ImageField("头像", upload_to="avatar", blank=True) did = models.IntegerField("所属部门ID", default=0) grade = models.IntegerField("年级") diff --git a/history/serializers.py b/history/serializers.py index ab52c15..00f8f54 100644 --- a/history/serializers.py +++ b/history/serializers.py @@ -1,3 +1,5 @@ +import re + from rest_framework import serializers from history.models import * from django.core.validators import int_list_validator @@ -6,11 +8,27 @@ from django.core.validators import int_list_validator class DepartmentSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Department - fields = ('did', 'department', 'part', 'title', 'content') + fields = ('did', 'department_en', 'department', 'part', 'title', 'content') + + def validate_department(self, value): + reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') + if not reg.match(value): + raise serializers.ValidationError("只能输入汉字") + return value + + def validate_department_en(self, value): + reg = re.compile(r'^[A-Za-z]*$') + if not reg.match(value): + raise serializers.ValidationError("只能输入英文") + return value did = serializers.IntegerField(required=True, error_messages={"blank": '部门ID不能为空', "invalid": '类型错误'}) department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, + validators=[validate_department], error_messages={"max_length": '长度过长', "blank": '部门名称不能为空'}) + department_en = serializers.CharField(max_length=30, required=True, trim_whitespace=True, + validators=[validate_department_en], + error_messages={"max_length": '长度过长', "blank": '部门英文名称不能为空'}) part = serializers.IntegerField(required=True, error_messages={"blank": '不能为空'}) # 区分同意部分不同段落 title = serializers.CharField(required=False, trim_whitespace=True, max_length=30, error_messages={"max_length": '题目过长'}) @@ -20,6 +38,7 @@ class DepartmentSerializer(serializers.HyperlinkedModelSerializer): 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) @@ -30,18 +49,29 @@ class DepartmentSerializer(serializers.HyperlinkedModelSerializer): class MembersSerializer(serializers.HyperlinkedModelSerializer): class Meta: model = Members - fields = ('did', 'department', 'grade', 'name', 'motto', 'avatar') + fields = ('id', 'did', 'department', 'grade', 'name', 'motto', 'avatar') + def name_validate(self, value): + reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') + if not reg.match(value): + raise serializers.ValidationError("只能输入汉字或英文") + return value + + def validate_avatar(self, value): + s = str(value) + return s + + id = serializers.IntegerField() did = serializers.IntegerField(required=True, error_messages={"blank": '部门ID不能为空', "invalid": '类型错误'}) department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, error_messages={"max_length": '部门名称过长', "blank": '部门名称不能为空'}) - grade = serializers.IntegerField(required=True, min_value=2002, max_value=2022, + grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022, error_messages={"max_value": '年级数过大', "blank": "年级数不能为空", "min_value": '年级数过小'}) name = serializers.CharField(required=True, trim_whitespace=True, max_length=6, error_messages={"blank": '姓名不能为空', "max_length": '姓名过长'}) - motto = serializers.CharField(required=False, trim_whitespace=True, max_length=25, + motto = serializers.CharField(required=False, trim_whitespace=True, max_length=25, validators=[name_validate], error_messages={"max_length": '座右铭过长'}) - avatar = serializers.ImageField() + avatar = serializers.ImageField(validators=[name_validate]) def update(self, instance, validated_data): instance.did = validated_data.get("did", instance.did) @@ -59,10 +89,17 @@ class HistorySerializer(serializers.HyperlinkedModelSerializer): model = History fields = ('grade', 'did', 'department') - grade = serializers.IntegerField(required=True, min_value=1970, max_value=2022, + def validate_department(self, value): + reg = re.compile(r'^[\u4e00-\u9fa5A-Za-z]*$') + if not reg.match(value): + raise serializers.ValidationError("只能输入汉字") + return value + + grade = serializers.IntegerField(required=True, min_value=2001, max_value=2022, error_messages={"max_value": '年级数过大', "blank": "年级数不能为空", "min_value": '年级数过小'}) did = serializers.IntegerField(required=True, error_messages={"blank": '部门ID不能为空', "invalid": '类型错误'}) department = serializers.CharField(max_length=10, required=True, trim_whitespace=True, + validators=[validate_department], error_messages={"max_length": '部门名称过长', "blank": '部门名称不能为空'}) def update(self, instance, validated_data): @@ -71,5 +108,3 @@ class HistorySerializer(serializers.HyperlinkedModelSerializer): instance.did = validated_data.get("did", instance.did) instance.save() return instance - - diff --git a/history/views.py b/history/views.py index 64ad590..b13d342 100644 --- a/history/views.py +++ b/history/views.py @@ -17,10 +17,11 @@ class DepartmentViewSet(APIView): "msg": "成功", } queryset = Department.objects.all().filter(did=request.GET.get('did')) - serializer = DepartmentSerializer(queryset, many=True, context={'request': request}) + serializer = DepartmentSerializer(queryset, many=True) try: response["data"] = serializer.data except: + response['code'] = 40000 response['msg'] = serializer.error_messages if len(response['data']) == 0: response['code'] = 40000 @@ -42,7 +43,7 @@ class MemberViewSet(APIView): grade = request.GET.get('grade') did = request.GET.get('did') try: - queryset = Members.objects.all().filter(Q(grade=grade) & Q(did=did)) + queryset = Members.objects.all().filter(Q(did=did) & Q(grade=grade)) serializer = MembersSerializer(queryset, many=True) except: response = { @@ -55,36 +56,25 @@ class MemberViewSet(APIView): class HistoryViewSet(APIView): - # 获取历史成员信息 + # 获取历史列表 @method_decorator(csrf_exempt) def get(self, request): response = { "code": 20000, "msg": "成功", } - # queryset = History.objects.all() - # serializer = HistorySerializer(queryset, many=True, context={'request': request}) - # try: - # s = serializer.data - # except: - # response['code'] = 40000 - # response['msg'] = serializer.error_messages.first() info = [] for i in range(2002, 2022): - data = {} - data['grade'] = i + data = {'grade': i} y = [] for j in range(0, 6): try: a = History.objects.get(Q(did=j) & Q(grade=i)) except: continue - x = {} - x['id'] = a.did - x['department_name'] = a.department + x = {'id': a.did, 'department_name': a.department} y.append(x) data['data'] = y info.append(data) response["data"] = info - print(response) return Response(data=response)