Merge remote-tracking branch 'remotes/gitee/enroll'
# Conflicts: # ITShowPlatform/settings.py # ITShowPlatform/urls.py
This commit is contained in:
+12
-13
@@ -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
|
||||
|
||||
|
||||
# 生成随机字符串
|
||||
@@ -35,21 +34,21 @@ 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 = datetime.datetime.now()
|
||||
# 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 == "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)
|
||||
@@ -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
|
||||
return True
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.0.4 on 2022-04-17 13:12
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('enroll', '0003_alter_new_member_email_alter_new_member_phone_number'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='emailverifyrecord',
|
||||
name='send_time',
|
||||
field=models.DateTimeField(auto_now_add=True, verbose_name='发送时间'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 4.0.4 on 2022-04-17 21:29
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('enroll', '0004_alter_emailverifyrecord_send_time'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='emailverifyrecord',
|
||||
name='code',
|
||||
field=models.CharField(max_length=5, verbose_name='验证码'),
|
||||
),
|
||||
]
|
||||
+2
-2
@@ -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)
|
||||
|
||||
+20
-2
@@ -1,7 +1,8 @@
|
||||
from rest_framework import serializers
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.validators import UniqueValidator
|
||||
|
||||
from enroll.models import Department, New_member
|
||||
from enroll.models import Department, New_member, EmailVerifyRecord
|
||||
import time
|
||||
|
||||
|
||||
class Department_serializer(serializers.ModelSerializer):
|
||||
@@ -59,3 +60,20 @@ class Send_email_serializer(serializers.Serializer):
|
||||
queryset=New_member.objects.all(),
|
||||
message="该邮箱已存在")],
|
||||
error_messages={"max_length": "邮箱过长", "invalid": "请输入正确格式的邮箱"})
|
||||
|
||||
def validate_email(self, data):
|
||||
# print(data)
|
||||
try:
|
||||
oj = EmailVerifyRecord.objects.get(email=data)
|
||||
# print(oj.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()
|
||||
# print(f"now={now},send={send_time}")
|
||||
if now - send_time < 120:
|
||||
raise serializers.ValidationError(code="verification_code", detail="请勿频繁发送验证码")
|
||||
else:
|
||||
# print(oj.email)
|
||||
oj.delete()
|
||||
except EmailVerifyRecord.DoesNotExist:
|
||||
pass
|
||||
|
||||
+35
-16
@@ -1,4 +1,3 @@
|
||||
from rest_framework.exceptions import ValidationError
|
||||
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):
|
||||
@@ -30,20 +30,31 @@ class Sign_up(GenericAPIView):
|
||||
data = request.data
|
||||
serializer = self.get_serializer(data=data)
|
||||
code = data['verification_code']
|
||||
# print(f"code={code}")
|
||||
print(f"code={code}")
|
||||
try:
|
||||
if code != EmailVerifyRecord.objects.get(email=data['email']).code:
|
||||
return Response({"verification_code": "邮箱验证码错误"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
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({"verification_code": "请先发送验证码"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
# print(serializer.errors)
|
||||
# if ret:
|
||||
# serializer.save()
|
||||
# else:
|
||||
# print(f"error_messages={serializer.errors}")
|
||||
return Response({"code": 20000, "msg": "成功"})
|
||||
return Response({"code": 40000, "msg": {"verification_code": "请先发送验证码"}},
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
ret = serializer.is_valid(raise_exception=False)
|
||||
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)
|
||||
|
||||
def get(self, request):
|
||||
string = request.query_params.get('string', '')
|
||||
@@ -65,6 +76,14 @@ class Send_email(APIView):
|
||||
def post(self, request):
|
||||
data = request.data
|
||||
serializer = Send_email_serializer(data=data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
send_code_email(data.get("email"))
|
||||
return Response({"code": 20000, "msg": "成功"})
|
||||
# code_serializer = Code_email_serializer()
|
||||
ret = serializer.is_valid()
|
||||
if ret:
|
||||
# serializer.save()
|
||||
send_code_email(data.get("email"))
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user