diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 856a1bb..d0ac666 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -31,9 +31,18 @@ - - + + + + + + + + + + + @@ -204,107 +206,11 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/Apps/enroll/admin.py b/Apps/enroll/admin.py index 49b1b84..3301911 100644 --- a/Apps/enroll/admin.py +++ b/Apps/enroll/admin.py @@ -51,5 +51,5 @@ class New_memberAdmin(admin.ModelAdmin): list_filter = () admin.site.register(Department ,DepartmentAdmin) -admin.site.register(New_member) +admin.site.register(NewMember) admin.site.register(EmailVerifyRecord) diff --git a/Apps/enroll/email.py b/Apps/enroll/email.py index ed0af32..08efd4f 100644 --- a/Apps/enroll/email.py +++ b/Apps/enroll/email.py @@ -22,11 +22,10 @@ def random_str(randomlength=8): # 发送电子邮件 -def send_code_email(email, send_type="register"): +def send_code_email(email): """ 发送电子邮件 :param email: 要发送的邮箱 - :param send_type: 邮箱类型 :return: True/False """ email_record = EmailVerifyRecord() @@ -34,26 +33,16 @@ def send_code_email(email, send_type="register"): code = "".join([str(random.randint(0, 9)) for i in range(4)]) email_record.code = code email_record.email = email - # email_record.send_type = send_type - # email_record.send_time = time.time() email_record.save() # 初始化为空 email_title = "" email_body = "" - # 如果为注册类型 - # if send_type == "register": - # email_title = "注册激活" - # # email_body = "请点击下面的链接激活你的账号:http://127.0.0.1:8000/active/{0}".format(code) - # email_body = "您的邮箱注册验证码为:{0}, 该验证码有效时间为两分钟,请及时进行验证。".format(code) - # # 发送邮件 - # send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email]) - # if not send_status: - # return False - if send_type == "retrieve": - email_title = "找回密码" - email_body = "您的邮箱注册验证码为:{0}, 该验证码有效时间为两分钟,请及时进行验证。".format(code) - # 发送邮件 - send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email]) - if not send_status: - return False + email_title = "注册激活" + file = open("/email_body") + email_body = str(file.read).format(code) + # 发送邮件 + send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email]) + if not send_status: + return False + return True diff --git a/Apps/enroll/email_body b/Apps/enroll/email_body new file mode 100644 index 0000000..b69d051 --- /dev/null +++ b/Apps/enroll/email_body @@ -0,0 +1 @@ +您的邮箱注册验证码为:{0}, 该验证码有效时间为两分钟,请及时进行验证。 \ No newline at end of file diff --git a/Apps/enroll/migrations/0006_rename_new_member_newmember.py b/Apps/enroll/migrations/0006_rename_new_member_newmember.py new file mode 100644 index 0000000..1a54818 --- /dev/null +++ b/Apps/enroll/migrations/0006_rename_new_member_newmember.py @@ -0,0 +1,17 @@ +# Generated by Django 4.0.4 on 2022-05-05 18:52 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('enroll', '0005_alter_emailverifyrecord_code'), + ] + + operations = [ + migrations.RenameModel( + old_name='New_member', + new_name='NewMember', + ), + ] diff --git a/Apps/enroll/models.py b/Apps/enroll/models.py index 209a5ce..e722ba2 100644 --- a/Apps/enroll/models.py +++ b/Apps/enroll/models.py @@ -19,7 +19,7 @@ class Department(models.Model): return self.name -class New_member(models.Model): +class NewMember(models.Model): schedules = [ (0, "尚未提交"), (1, "已报名"), diff --git a/Apps/enroll/serializers.py b/Apps/enroll/serializers.py index eb5b648..96ca332 100644 --- a/Apps/enroll/serializers.py +++ b/Apps/enroll/serializers.py @@ -1,67 +1,76 @@ from rest_framework import serializers from rest_framework.validators import UniqueValidator -from Apps.enroll.models import Department, New_member, EmailVerifyRecord +from Apps.enroll.models import Department, NewMember, EmailVerifyRecord import time +from utils.get_error_msg import get_error_msg -class Department_serializer(serializers.ModelSerializer): +class department_serializer(serializers.ModelSerializer): + """获取部门信息""" + class Meta: model = Department fields = "__all__" -class New_member_serializer(serializers.ModelSerializer): +class new_member_serializer(serializers.ModelSerializer): + """用于添加新成员时的校验与序列化""" + # verification_code = serializers.CharField(source="verification_code.code") email = serializers.EmailField(validators=[ UniqueValidator( - queryset=New_member.objects.all(), - message="该邮箱已存在" + queryset=NewMember.objects.all(), + message=get_error_msg(43032) ) ]) phone_number = serializers.CharField(validators=[ UniqueValidator( - queryset=New_member.objects.all(), - message="该手机号码已存在" + queryset=NewMember.objects.all(), + message=get_error_msg(43033) ), ], - max_length=11, error_messages={"max_length": "手机号码不合规"} + max_length=11, error_messages={"max_length": get_error_msg(42033)} ) class Meta: - model = New_member + model = NewMember exclude = ["id", "schedule"] extra_kwargs = { "name": { "error_messages": { - "max_length": "姓名过长" + "max_length": get_error_msg(42034) } }, "major": { "error_messages": { - "max_length": "文字过长" + "max_length": get_error_msg(42035) } }, } -class New_member_schedule_serializer(serializers.ModelSerializer): +class new_member_schedule_serializer(serializers.ModelSerializer): + """获取成员录取状态信息的序列化器""" + class Meta: - model = New_member + model = NewMember fields = ["name", "email", "schedule"] -class Send_email_serializer(serializers.Serializer): +class send_email_serializer(serializers.Serializer): + """发送邮件时校验用序列化器""" + # code = serializers.CharField(max_length=10) email = serializers.EmailField(max_length=50, validators=[UniqueValidator( - queryset=New_member.objects.all(), - message="该邮箱已存在")], - error_messages={"max_length": "邮箱过长", "invalid": "请输入正确格式的邮箱"}) + queryset=NewMember.objects.all(), + message=get_error_msg(43032))], + error_messages={"max_length": get_error_msg(42032), "invalid": get_error_msg(44036)}) def validate_email(self, data): - # print(data) + try: oj = EmailVerifyRecord.objects.get(email=data) # print(oj.email)/ @@ -70,7 +79,7 @@ class Send_email_serializer(serializers.Serializer): now = time.time() # print(f"now={now},send={send_time}") if now - send_time < 120: - raise serializers.ValidationError(code="verification_code", detail="请勿频繁发送验证码") + raise serializers.ValidationError(code="verification_code", detail=get_error_msg(44033)) else: # print(oj.email) oj.delete() diff --git a/Apps/enroll/urls.py b/Apps/enroll/urls.py index 86591da..a77c3ad 100644 --- a/Apps/enroll/urls.py +++ b/Apps/enroll/urls.py @@ -4,8 +4,8 @@ from . import views # from rest_framework.routers import DefaultRouter urlpatterns = [ - path("department/", views.Department_message.as_view()), - path("sign_up/", views.Sign_up.as_view()), - path("sign_up/verification_code/", views.Send_email.as_view()), + path("department/", views.department_message.as_view()), + path("sign_up/", views.sign_up.as_view()), + path("sign_up/verification_code/", views.send_email.as_view()), # path("sign_up/", views.Sign_in.as_view({"get": "get"})) ] diff --git a/Apps/enroll/views.py b/Apps/enroll/views.py index 78868cd..c3f5e41 100644 --- a/Apps/enroll/views.py +++ b/Apps/enroll/views.py @@ -1,36 +1,45 @@ from rest_framework.response import Response from rest_framework.generics import GenericAPIView -from Apps.enroll.models import Department, EmailVerifyRecord, New_member -from Apps.enroll.serializers import Department_serializer, New_member_serializer, New_member_schedule_serializer, \ - Send_email_serializer +from Apps.enroll.models import Department, EmailVerifyRecord, NewMember +from Apps.enroll.serializers import department_serializer, new_member_serializer, new_member_schedule_serializer, \ + send_email_serializer 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 import re import time -class Department_message(GenericAPIView): +class department_message(GenericAPIView): + """获取部门信息""" + queryset = Department.objects.all() - serializer_class = Department_serializer + serializer_class = department_serializer def get(self, request): serializer = self.get_serializer(instance=self.get_queryset(), many=True) # print(request.query_params) if request.query_params: - return Response({"code": 40000, "msg": "请求失败"}) - return Response({"code": 20000, "msg": "成功", "data": serializer.data}, status=status.HTTP_200_OK) + return Response({"code": 40000, "msg": get_error_msg("40000")}) + return Response({"code": 20000, "msg": get_error_msg("20000"), "data": serializer.data}) -class Sign_up(GenericAPIView): - serializer_class = New_member_serializer - queryset = New_member.objects.all() +class sign_up(GenericAPIView): + """ + 新成员报名 + post:提交新学员信息 + get:根据邮箱及手机号获取成员录取状态 + """ + + serializer_class = new_member_serializer + queryset = NewMember.objects.all() def post(self, request): data = request.data serializer = self.get_serializer(data=data) code = data['verification_code'] - print(f"code={code}") + # print(f"code={code}") try: oj = EmailVerifyRecord.objects.get(email=data['email']) send_time = str(oj.send_time).split('+')[0].split('.')[0] @@ -38,18 +47,18 @@ class Sign_up(GenericAPIView): now = time.time() if now - send_time > 120: return Response( - {"code": 40000, "msg": {"verification_code": "邮箱验证码过期"}}, + {"code": 40000, "msg": {"verification_code": get_error_msg(45032)}}, status=status.HTTP_400_BAD_REQUEST) if code != oj.code: - return Response({"code": 40000, "msg": {"verification_code": "邮箱验证码错误"}}, + return Response({"code": 45032, "msg": {"verification_code": get_error_msg(44031)}}, status=status.HTTP_400_BAD_REQUEST) except EmailVerifyRecord.DoesNotExist: - return Response({"code": 40000, "msg": {"verification_code": "请先发送验证码"}}, + return Response({"code": 44032, "msg": {"verification_code": get_error_msg(44032)}}, status=status.HTTP_400_BAD_REQUEST) ret = serializer.is_valid(raise_exception=False) if ret: serializer.save() - return Response({"code": 20000, "msg": "成功"}) + return Response({"code": 20000, "msg": get_error_msg(20000)}) else: error = {} for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()): @@ -65,23 +74,25 @@ class Sign_up(GenericAPIView): queryset = self.get_queryset().get(phone_number=string) else: queryset = self.get_queryset().get(id=-1) - except New_member.DoesNotExist: - return Response({"code": 40000, "msg": "信息不存在"}) - serializer = New_member_schedule_serializer(instance=queryset) + except NewMember.DoesNotExist: + return Response({"code": 40000, "msg": get_error_msg(45030)}) + serializer = new_member_schedule_serializer(instance=queryset) - return Response({"code": 20000, "msg": "查询成功", "data": serializer.data}) + return Response({"code": 20000, "msg": get_error_msg(20000), "data": serializer.data}) -class Send_email(APIView): +class send_email(APIView): + """发送邮件""" + def post(self, request): data = request.data - serializer = Send_email_serializer(data=data) + serializer = send_email_serializer(data=data) # code_serializer = Code_email_serializer() ret = serializer.is_valid() if ret: # serializer.save() send_code_email(data.get("email")) - return Response({"code": 20000, "msg": "成功"}) + return Response({"code": 20000, "msg": get_error_msg(20000)}) else: error = {} for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()): diff --git a/ITShowPlatform/settings.py b/ITShowPlatform/settings.py index 4cbb943..3fabd50 100644 --- a/ITShowPlatform/settings.py +++ b/ITShowPlatform/settings.py @@ -30,6 +30,7 @@ ALLOWED_HOSTS = ["*"] # Application definition INSTALLED_APPS = [ + 'simpleui', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', @@ -41,6 +42,7 @@ INSTALLED_APPS = [ 'Apps.history', 'Apps.comments', + ] MIDDLEWARE = [ @@ -82,7 +84,7 @@ DATABASES = { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'ITShowPlatform', 'USER': 'root', - 'PASSWORD': 'HNXhnx123', + 'PASSWORD': '123456', } } diff --git a/utils/get_error_msg.py b/utils/get_error_msg.py index f9fe2c4..b467c22 100644 --- a/utils/get_error_msg.py +++ b/utils/get_error_msg.py @@ -5,5 +5,18 @@ def get_error_msg(code="20000"): "50403": "Forbidden", "40000": "请求方法错误", "40001": "JSON解析错误", + "45030": "信息不存在", + "45032": "邮箱验证码过期", + "44031": "邮箱验证码错误", + "44032": "请先发送验证码", + "43032": "该邮箱已存在", + "43033": "该手机号码已存在", + "42033": "手机号码不合规", + "42034": "姓名过长", + "42035": "说的太多啦", + "42032": "邮箱过长", + "44033": "请勿频繁发送验证码", + "44036": "请输入正确格式的邮箱", + } return error_set.get(str(code))