Django 2.1.2密码重置身份验证视图:找不到与“ password_reset_confirm”相反的内容

时间:2018-10-22 14:57:18

标签: django python-3.x django-authentication

我的密码重置系统有问题。 代码如下。当我直接在浏览器地址中输入相应的URL时,它会显示预期的Django表单/页面。 但是,如果我填写电子邮件地址并单击Enter /单击链接,则会得到“找不到'password_reset_confirm'的反向字符。'password_reset_confirm'不是有效的视图函数或模式名称。” password_reset_email.html中第6行出现错误。 但是我已经包含了uid64!和令牌! 另外,当我故意使用不正确的电子邮件地址时,会收到“找不到'password_reset_done'的反向字符。'password_reset_done'不是有效的视图函数或模式名称。”错误。

从django文档,该站点上的其他类似问题或各种指南中,我看不到明显的简单步骤是我一定错过了。

from django.urls import path
from django.contrib.auth import views as auth_views

from . import views

app_name = 'users'
urlpatterns = [
    path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
    path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('password_reset/confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('password_reset/complete/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
    ]

2 个答案:

答案 0 :(得分:1)

问题在于,当反转密码重置urls.py时,Django不使用名称空间。您可以通过从app_name='users'中删除urls.py来停止错误。

或者,您可以配置密码重置视图以使用名称空间:“

path('password_reset/', auth_views.PasswordResetView.as_view(success_url=reverse_lazy('users:password_reset_done')), name='password_reset'),

这将修复立即出现的错误,但是您将发现需要进行其他一些更改才能修复类似的错误。删除app_name='users'更直接。

答案 1 :(得分:0)

定义app_name时,还应指定反向。 使用users:password_reset_done代替password_reset_done

检查reversing-namespaced-urls了解更多详细信息。