I am trying to build a email verification for my website with django rest framework. The mechanism is like this:
- User enters his email and presses continue button
- He gets a 6 digit verification code
- He enters the 6 digit code that he received
- If the code is valid he goes to next step and else an error occurs
My problem is in step 4. I don't know how to check the verification code equality, because I can't get it from step 2.
My codes are below. I'd be so happy if anyone can help me through this problem:)
serializers.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'})
I want to know how to get the generated code in EmailView and use it in CodeView for equality check.
Thanks