Рабочий процесс восстановления пароля DRF выбрасывает django .template.exceptions.TemplateDoesNotExist - PullRequest
0 голосов
/ 20 апреля 2020

Я использую Django Сброс пароля восстановления для рабочего процесса сброса пароля, так как, на мой взгляд, лучше всего поддерживается для этого конкретного случая.

В urls.py

# Password reset
path('reset-password/verify-token/', views.CustomPasswordTokenVerificationView.as_view(), name='password_reset_verify_token'),
path('reset-password/', include('django_rest_passwordreset.urls', namespace='password_reset')),

и в settings.py

EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'

Если я go сбросить пароль / после запуска сервера, это то, что я получаю

Django REST Reset Password Request Token

Если я отправлю сообщение электронной почты, которое не хранится в БД, то оно выдаст неверный запрос HTTP 400 с

{
    "email": [
        "There is no active user associated with this e-mail address or the password can not be changed"
    ]
}

Если я отправлю сообщение электронной почты, которое хранится в БД я получаю

django.template.exceptions.TemplateDoesNotExist: user_reset_password.html

TemplateDoesNotExist в / test_app / reset-password / user_reset_password. html

Я поместил приемник сигнала в представление с именем CustomPasswordResetView

class CustomPasswordResetView:
    @receiver(reset_password_token_created)
    def password_reset_token_created(sender, reset_password_token, *args, **kwargs):
        """
          Handles password reset tokens
          When a token is created, an e-mail needs to be sent to the user
        """
        # send an e-mail to the user
        context = {
            'current_user': reset_password_token.user,
            'username': reset_password_token.user.username,
            'email': reset_password_token.user.email,
            'reset_password_url': "{}?token={}".format(reverse('password_reset:reset-password-request'), reset_password_token.key)
        }

        # render email text
        email_html_message = render_to_string('user_reset_password.html', context)
        email_plaintext_message = render_to_string('user_reset_password.txt', context)

        msg = EmailMultiAlternatives(
            # title:
            "Password Reset for {title}".format(title="Some website title"),
            # message:
            email_plaintext_message,
            # from:
            "test@test.com",
            # to:
            [reset_password_token.user.email]
        )
        msg.attach_alternative(email_html_message, "text/html")
        msg.send()

. Как вы можете прочитать, в нем есть место для отрисовки текста электронной почты с

email_html_message = render_to_string('user_reset_password.html', context)
email_plaintext_message = render_to_string('user_reset_password.txt', context)

. в той же папке, где находится представление, созданы два файла user_reset_password. html и user_reset_password.txt с одинаковым содержимым в них

{% load i18n %}{% blocktrans %}Hello!

You're receiving this e-mail because you or someone else has requested a password for your user account.
It can be safely ignored if you did not request a password reset. Click the link below to get the token.{% endblocktrans %}

{{ reset_password_url }}

Then, if you go to /test_app/reset-password/confirm/, you can paste the token and the new password.

{% if email %}{% blocktrans %}In case you forgot, your email is {{ email }}.{% endblocktrans %}

{% endif %}{% blocktrans %}Have a great day!
{% endblocktrans %}

Почему я до сих пор TemplateDoesNotExist в / test_app / reset-password / user_reset_password. html и как его решить?

1 Ответ

1 голос
/ 20 апреля 2020

Начиная с шаблонов документация

Механизмы шаблонов настраиваются с помощью параметра ШАБЛОНЫ. Это список конфигураций, по одной для каждого двигателя. Значение по умолчанию пусто.

У вас может быть root папка с шаблонами, в которую вы должны добавить шаблоны

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    },

Если вы хотите иметь для каждой папки шаблонов приложений, вы можете проверить следующие документы

'APP_DIRS': True,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...