Cutomize dj_rest_auth Сброс пароля по электронной почте

Я хочу отправлять настроенные электронные письма, когда пользователь запрашивает сброс пароля. Я использую dj_rest_auth с django. Вот что я сделал: 1. Определил пользовательский сериализатор, который наследуется от PasswordResetSerializer из dj_rest_auth

class CustomPasswordResetSerializer(PasswordResetSerializer):
    def get_email_options(self):
        return {
            'html_mail_template_name': 'registration/password_reset_email.html',
        }

Затем в settings.py указал на этот сериализатор:

REST_AUTH_SERIALIZERS = {
    'LOGIN_SERIALIZER': 'users.serializers.CustomLoginSerializer',
    'PASSWORD_RESET_SERIALIZER': 'users.serializers.CustomPasswordResetSerializer',
}

Затем настроенные шаблоны в settings.py

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates')],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.debug',
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib.messages.context_processors.messages',
        ],
    },
},

]

Затем я создал папку templates в корне проекта, создал в ней папку registration и поместил в нее password_reset_email.html.

Это то, что я нашел как точное решение моей проблемы после того, как погуглил некоторое время, но это не работает для меня. Что я упустил?

Этот ответ помог мне https://stackoverflow.com/a/70624462/15624533

Я просто положил свои файлы (html или txt) прямо в папку templates, и изменил 'account/email/password_reset_key' на просто 'password_reset_key' в методе send_mail.

Я столкнулся с той же проблемой и получил решение из этого вопроса на GitHub. https://github.com/iMerica/dj-rest-auth/issues/9 . Это проще, чем вы думаете

Создайте свой собственный сериализатор сброса пароля

from dj_rest_auth.serializers import PasswordResetSerializer

class CustomPasswordResetSerializer(PasswordResetSerializer):
    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': 'example@yourdomain.com',
            'request': request,
            # here I have set my desired template to be used
            # don't forget to add your templates directory in settings to be found
            'email_template_name': 'password_reset_email.html'
        }

        opts.update(self.get_email_options())
        self.reset_form.save(**opts)

Если вы хотите настроить только параметры электронной почты, ни больше ни меньше, вы можете игнорировать переопределение метода save() и переопределить get_email_options() вместо этого

from dj_rest_auth.serializers import PasswordResetSerializer

class MyPasswordResetSerializer(PasswordResetSerializer):

    def get_email_options(self) :
      
        return {
            'email_template_name': 'password_reset_email.html'
        }

затем укажите на ваш пользовательский сериализатор в settings.py

REST_AUTH_SERIALIZERS = {
    'PASSWORD_RESET_SERIALIZER': 'path.to.your.CustomPasswordResetSerializer'
}
Вернуться на верх