Как позвонить в мой пользовательский PasswordResetSerializer?(Джанго - ДРФ) - PullRequest
0 голосов
/ 28 июня 2019

Я хочу использовать свой собственный PasswordResetSerializer для автоматической отправки электронного письма после того, как пользователь достигнет предела попыток входа в систему

Этот пользовательский сериализатор отлично работает в моем интерфейсе через вызов API, но я хочу использовать его в моем бэкэнде аутентификации (см. Authentication.py в последней строке)

Вот мой код:

authentication.py

class ExampleAuthentication(authentication.BaseAuthentication):
    def authenticate(self, request):
        username = request.data.get('email', None)  # get the username request header
        password = request.data.get('password', None)

    """
    After all validations and login attempts

    """
    if user.fails_authentication():
        #Use here my custom PasswordResetSerializer

Вот мой пользовательский сериализатор

serializers.py

class PasswordResetSerializer(serializers.Serializer):
    email = serializers.EmailField()
    password_reset_form_class = PasswordResetForm
    def validate_email(self, value):
        self.reset_form = self.password_reset_form_class(data=self.initial_data)
        if not self.reset_form.is_valid():
            raise serializers.ValidationError(_('Error'))

        ###### FILTER YOUR USER MODEL ######
        if not User.objects.filter(email=value).exists():
            raise serializers.ValidationError(_('Invalid e-mail address'))
        return value

    def save(self):
        request = self.context.get('request')
        user = User.objects.get(email=request.data.get('email'))
        token = Token.objects.get(user=user.id)
        uid = urlsafe_base64_encode(force_bytes(user.id)).decode()
        template = 'example_message.html'
        context = {'usertoken': token, 'reactdomain': 'localhost:3000', 'userid': uid}
        opts = {
        'use_https': request.is_secure(),
        'from_email': getattr(settings, 'DEFAULT_FROM_EMAIL'),

        ###### USE YOUR TEXT FILE ######
        'email_template_name': template,
        'extra_email_context': context,
        'html_email_template_name': template,
        'request': request,
        }
        self.reset_form.save(**opts)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...