DRF密码剩余工作流程抛出django.template.exceptions.TemplateDoesNotExist [英] DRF password rest workflow throwing django.template.exceptions.TemplateDoesNotExist

查看:186
本文介绍了DRF密码剩余工作流程抛出django.template.exceptions.TemplateDoesNotExist的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Django Rest Password Reset 进行重置密码工作流程因为我认为这是针对这种情况的最佳支持.

I'm using Django Rest Password Reset for the reset password workflow as it's, at my sight, the best supported for this particular case.

在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

and in settings.py

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

如果我在运行服务器后转到reset-password/,这就是我得到的

If i go to reset-password/ after running the server, this is what i get

如果我发布未存储在数据库中的电子邮件,则会通过

If i POST an email that's not stored in the DB, then it gives a HTTP 400 Bad Request with

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

如果我发布存储在数据库中的电子邮件,那么我会得到

If i POST an email that's stored in the DB, then I get

TemplateDoesNotExist位于/​​ test_app/reset-password/ user_reset_password.html

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

我将信号接收器放置在一个名为CustomPasswordResetView的视图中

I placed the signal receiver inside of a view named 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()

您可以阅读其中的内容,其中有一个用于呈现电子邮件文本的地方

As you can read in it, there's a place for the render email text with

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,它们中的内容相同

Within the same folder where the view is at, created two files user_reset_password.html and user_reset_password.txt with the same content in them

{% 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 %}

为什么我仍然在/test_app/reset-password/user_reset_password.html上 TemplateDoesNotExist ,以及如何解决该问题?

Why do i still TemplateDoesNotExist at /test_app/reset-password/ user_reset_password.html and how to solve it?

推荐答案

自模板文档

模板引擎使用TEMPLATES设置进行配置.它是 配置列表,每个引擎一个.默认值为 空的.

Templates engines are configured with the TEMPLATES setting. It’s a list of configurations, one for each engine. The default value is empty.

您可以在根模板文件夹中添加模板

You can have root template folder in which you should add templates

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

如果您想拥有每个应用程序模板文件夹,则可以检查以下

If you want to have per app templates folder you can check following docs

'APP_DIRS': True,

这篇关于DRF密码剩余工作流程抛出django.template.exceptions.TemplateDoesNotExist的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆