Last active
October 29, 2019 06:04
-
-
Save shimakaze-git/4f17c0148824af4a6c6814b2c2782764 to your computer and use it in GitHub Desktop.
PasswordResetSerializer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from django.conf import settings | |
from django.contrib.auth.forms import PasswordResetForm | |
from rest_framework import serializers | |
from rest_framework.exceptions import ValidationError | |
class PasswordResetSerializer(serializers.Serializer): | |
""" | |
Serializer for requesting a password reset e-mail. | |
""" | |
email = serializers.EmailField() | |
password_reset_form_class = PasswordResetForm | |
def get_email_options(self): | |
"""Override this method to change default e-mail options""" | |
data = { | |
'email_template_name': 'email/password_reset.html', | |
'subject_template_name': 'email/password_reset_subject.txt', | |
} | |
return data | |
def validate_email(self, value): | |
# Create PasswordResetForm with the serializer | |
self.reset_form = self.password_reset_form_class(data=self.initial_data) | |
if not self.reset_form.is_valid(): | |
raise serializers.ValidationError(self.reset_form.errors) | |
return value | |
def save(self): | |
request = self.context.get('request') | |
# Set some values to trigger the send_email method. | |
opts = { | |
'use_https': request.is_secure(), | |
'from_email': getattr(settings, 'DEFAULT_FROM_EMAIL'), | |
'request': request, | |
} | |
opts.update(self.get_email_options()) | |
self.reset_form.save(**opts) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from rest_framework.generics import GenericAPIView | |
from .serializers import PasswordResetSerializer | |
class PasswordResetView(GenericAPIView): | |
permission_classes = (permissions.AllowAny,) | |
serializer_class = PasswordResetSerializer | |
def post(self, request): | |
serializer = self.get_serializer(data=request.data) | |
if serializer.is_valid(): | |
serializer.save() | |
return Response('Password reset e-mail has been sent.', status=200) | |
return Response(serializer.errors, status=400) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment