【发布时间】:2022-01-16 08:55:26
【问题描述】:
我正在尝试使用 django rest 框架为我的网站构建电子邮件验证。机制是这样的:
- 用户输入他的电子邮件并按继续按钮
- 他得到一个 6 位数的验证码
- 他输入了他收到的 6 位数代码
- 如果代码有效,他会进入下一步,否则会发生错误
我的问题在第4步。我不知道如何检查验证码是否相等,因为我无法从第2步得到它。
我的代码如下。如果有人能帮助我解决这个问题,我会很高兴:)
序列化器.py
class CodeSerializer(serializers.Serializer):
code = serializers.IntegerField()
class EmailSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['email', ]
methods.py
import random
from django.conf import settings
from django.core.mail import send_mail
def generate_activation_code():
return int(''.join([str(random.randint(0,10)) for _ in range(6)]))
def send_verification_mail(email):
generated_code = generate_activation_code()
subject = 'Sinjim verification code'
message = f'Your verification code:\n{generated_code}\nThanks for using sinjim.'
from_email = settings.EMAIL_HOST_USER
recipient_list=[email, ]
send_mail(subject, message, from_email, recipient_list)
views.py
class EmailView(APIView):
def post(self, request, format=None):
serializer = EmailSerializer(data=request.data)
if serializer.is_valid():
email = serializer.validated_data['email']
methods.send_verification_mail(email)
return Response(serializer.data, status=status.HTTP_201_CREATED)
else:
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class CodeView(APIView):
def post(self, request, format=None):
serializer = CodeSerializer(data=request.data)
code2 = methods.generate_activation_code()
if serializer.is_valid():
if serializer.validated_data['code'] == code2:
return Response({'message':'equal'})
else:
return Response({'message':'not equal'})
else:
print(serializer.errors)
return Response({'message': 'Serializer is not valid'})
我想知道如何在 EmailView 中获取生成的代码,并在 CodeView 中使用它进行相等性检查。
谢谢
【问题讨论】:
标签: python django django-rest-framework