Django 2.1.2 密码重置身份验证视图:找不到“password_reset_confirm”的反向
Posted
技术标签:
【中文标题】Django 2.1.2 密码重置身份验证视图:找不到“password_reset_confirm”的反向【英文标题】:Django 2.1.2 Password reset auth view: Reverse for 'password_reset_confirm' not found 【发布时间】:2019-03-26 16:52:33 【问题描述】:我的密码重置系统有问题。 代码如下。当我直接在浏览器地址中输入相应的 URL 时,它会显示预期的 Django 表单/页面。 但是,如果我填写电子邮件地址并按回车键/单击链接,我会得到“找不到‘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'),
]
【问题讨论】:
【参考方案1】:问题是 Django 在反转密码重置 urls.py 时没有使用命名空间。您可以通过从您的 urls.py
中删除 app_name='users'
来停止错误。
或者,您可以将密码重置视图配置为使用命名空间:"
path('password_reset/', auth_views.PasswordResetView.as_view(success_url=reverse_lazy('users:password_reset_done')), name='password_reset'),
这将修复即时错误,但您会发现您需要进行一些其他更改才能修复类似错误。删除 app_name='users'
更直接。
【讨论】:
尝试使用 success_url 方法会导致 TypeError: PasswordResetDoneView() received an invalid keyword 'success_url'。 as_view 只接受已经是类属性的参数 删除应用程序名称确实有效,我在该文件中定义了其他 url。将它们分开已经成功。非常感谢您的帮助。 那个错误来自PasswordResetDoneView
——我的回答说你必须改变PasswordResetView
。
你说的完全正确!我显然需要咖啡。非常感谢。【参考方案2】:
当您定义app_name
时,您也应该为反向指定它。
使用users:password_reset_done
而不是password_reset_done
查看reversing-namespaced-urls了解更多详情。
【讨论】:
以上是关于Django 2.1.2 密码重置身份验证视图:找不到“password_reset_confirm”的反向的主要内容,如果未能解决你的问题,请参考以下文章
电子邮件验证和密码重置 - django rest 框架和 angularjs
Laravel 5.1/AngularJS:在 Angular 视图中重置密码(如何验证 CSRF 令牌?)
Django Social Auth - 我无法重置通过Facebook签名的用户的密码
具有社交媒体身份验证的用户的 Firebase 重置密码问题