From 7015fd799d9e130004964fa2708795578f60ddde Mon Sep 17 00:00:00 2001 From: ygm1881 <2302253692@qq.com> Date: Sun, 17 Apr 2022 22:04:32 +0800 Subject: [PATCH] enroll --- ITShowPlatform/settings.py | 4 ++-- enroll/email.py | 7 +++---- enroll/models.py | 4 ++-- enroll/serializer.py | 5 ++--- enroll/views.py | 19 ++++++++++++------- 5 files changed, 21 insertions(+), 18 deletions(-) diff --git a/ITShowPlatform/settings.py b/ITShowPlatform/settings.py index a7164af..550e793 100644 --- a/ITShowPlatform/settings.py +++ b/ITShowPlatform/settings.py @@ -112,11 +112,11 @@ AUTH_PASSWORD_VALIDATORS = [ LANGUAGE_CODE = 'en-us' -TIME_ZONE = 'UTC' +TIME_ZONE = 'Asia/Shanghai' USE_I18N = True -USE_TZ = True +# USE_TZ = True # Static files (CSS, JavaScript, Images) diff --git a/enroll/email.py b/enroll/email.py index 793301f..7efcd81 100644 --- a/enroll/email.py +++ b/enroll/email.py @@ -1,9 +1,8 @@ from random import Random # 用于生成随机码 from django.core.mail import send_mail # 发送邮件模块 from enroll.models import EmailVerifyRecord # 邮箱验证model -from django.conf import settings # setting.py添加的的配置信息 +from django.conf import settings # setting.py添加的的配置信息 import random -import datetime # 生成随机字符串 @@ -36,7 +35,7 @@ def send_code_email(email, send_type="register"): email_record.code = code email_record.email = email # email_record.send_type = send_type - # email_record.send_time = datetime.datetime.now() + # email_record.send_time = time.time() email_record.save() # 初始化为空 email_title = "" @@ -57,4 +56,4 @@ def send_code_email(email, send_type="register"): send_status = send_mail(email_title, email_body, settings.EMAIL_FROM, [email]) if not send_status: return False - return True \ No newline at end of file + return True diff --git a/enroll/models.py b/enroll/models.py index 34c7a22..209a5ce 100644 --- a/enroll/models.py +++ b/enroll/models.py @@ -49,9 +49,9 @@ class New_member(models.Model): class EmailVerifyRecord(models.Model): # 验证码 - code = models.CharField(max_length=20, verbose_name="验证码") + code = models.CharField(max_length=5, verbose_name="验证码") email = models.EmailField(max_length=50, verbose_name="邮箱") # 包含注册验证和找回验证 # send_type = models.CharField(verbose_name="验证码类型", max_length=10, # choices=(("register", "注册"), ("forget", "找回密码"))) - send_time = models.DateTimeField(verbose_name="发送时间", auto_now=True) + send_time = models.DateTimeField(verbose_name="发送时间", auto_now_add=True) diff --git a/enroll/serializer.py b/enroll/serializer.py index ce6832a..4b1cc27 100644 --- a/enroll/serializer.py +++ b/enroll/serializer.py @@ -1,7 +1,6 @@ from rest_framework import serializers from rest_framework.validators import UniqueValidator - -from enroll.models import Department, New_member +from enroll.models import Department, New_member, EmailVerifyRecord class Department_serializer(serializers.ModelSerializer): @@ -56,6 +55,6 @@ 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(), + queryset=New_member.objects.all() and EmailVerifyRecord.objects.all(), message="该邮箱已存在")], error_messages={"max_length": "邮箱过长", "invalid": "请输入正确格式的邮箱"}) diff --git a/enroll/views.py b/enroll/views.py index b25f894..3b89260 100644 --- a/enroll/views.py +++ b/enroll/views.py @@ -1,4 +1,3 @@ -from rest_framework.exceptions import ValidationError, ErrorDetail from rest_framework.response import Response from rest_framework.generics import GenericAPIView from enroll.models import Department, EmailVerifyRecord, New_member @@ -8,6 +7,7 @@ from rest_framework import status from rest_framework.views import APIView from enroll.email import send_code_email import re +import time class Department_message(GenericAPIView): @@ -32,24 +32,29 @@ class Sign_up(GenericAPIView): code = data['verification_code'] print(f"code={code}") try: - if code != EmailVerifyRecord.objects.get(email=data['email']).code: + oj = EmailVerifyRecord.objects.get(email=data['email']) + send_time = str(oj.send_time).split('+')[0].split('.')[0] + send_time = time.mktime(time.strptime(send_time, '%Y-%m-%d %X')) + now = time.time() + if now - send_time > 120: + return Response( + {"code": 40000, "msg": {"verification_code": "邮箱验证码过期"}}, + status=status.HTTP_400_BAD_REQUEST) + if code != oj.code: return Response({"code": 40000, "msg": {"verification_code": "邮箱验证码错误"}}, status=status.HTTP_400_BAD_REQUEST) except EmailVerifyRecord.DoesNotExist: return Response({"code": 40000, "msg": {"verification_code": "请先发送验证码"}}, status=status.HTTP_400_BAD_REQUEST) ret = serializer.is_valid(raise_exception=False) - # serializer.save() - # print(serializer.errors) - # ErrorDetail if ret: serializer.save() + return Response({"code": 20000, "msg": "成功"}) else: error = {} for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()): error[str(i)] = str(j[0]) return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST) - return Response({"code": 20000, "msg": "成功"}) def get(self, request): string = request.query_params.get('string', '') @@ -71,6 +76,7 @@ class Send_email(APIView): def post(self, request): data = request.data serializer = Send_email_serializer(data=data) + # code_serializer = Code_email_serializer() ret = serializer.is_valid() if ret: # serializer.save() @@ -81,4 +87,3 @@ class Send_email(APIView): for (i, j) in zip(serializer.errors.keys(), serializer.errors.values()): error[str(i)] = str(j[0]) return Response({"code": 40000, "msg": error}, status=status.HTTP_400_BAD_REQUEST) -