DRF密码剩余工作流程抛出django.template.exceptions.TemplateDoesNotExist [英] DRF password rest workflow throwing 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屋!