Skip to content

Instantly share code, notes, and snippets.

@shimakaze-git
Last active October 29, 2019 06:04
Show Gist options
  • Save shimakaze-git/4f17c0148824af4a6c6814b2c2782764 to your computer and use it in GitHub Desktop.
Save shimakaze-git/4f17c0148824af4a6c6814b2c2782764 to your computer and use it in GitHub Desktop.
PasswordResetSerializer
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)
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