I’m new to Django and the Django REST framework, and I want to validate incoming requests to ensure that incorrect fields return a “bad request” response.
I’ve programmed a solution, but I think it could be improved. Can someone help me with a better way to validate fields in requests?
What I have done is here but I think there are way better solution
first_key = next(iter(serializer.initial_data))
if serializer.is_valid() and first_key == "email":
Views.py
class ResetPasswordView(generics.GenericAPIView):
def post(self, request):
serializer = ResetPasswordSerializer(data=request.data)
first_key = next(iter(serializer.initial_data))
if serializer.is_valid() and first_key == "email":
email = serializer.initial_data['email']
user = User.objects.filter(email=email).first()
if user:
token_generator = PasswordResetTokenGenerator()
token = token_generator.make_token(user)
# Insert new password reset object in db
PasswordReset.objects.update_or_create(
user = user,
defaults= { 'token': token }
)
reset_url = f"{os.environ['PASSWORD_RESET_BASE_URL']}/{token}"
# TODO: implement here to send an email
return Response({'success': 'We have sent you a link to reset your password'}, status=status.HTTP_200_OK)
else:
return Response({"error": "User with credentials not found"}, status=status.HTTP_404_NOT_FOUND)
else:
return Response({"error": "Bad request"}, status=status.HTTP_400_BAD_REQUEST)
serializers.py
class ResetPasswordSerializer(serializers.Serializer):
email = serializers.EmailField(
required=True,
),
class Meta:
model = PasswordReset
fields = ['email']