【问题标题】:Django 2.1.2 Password reset auth view: Reverse for 'password_reset_confirm' not foundDjango 2.1.2 密码重置身份验证视图:找不到“password_reset_confirm”的反向
【发布时间】:2020-07-21 18:38:06
【问题描述】:

我的密码重置系统有问题。 代码如下。当我直接在浏览器地址中输入相应的 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'),
    ]

【问题讨论】:

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


    【解决方案1】:

    当您定义app_name 时,您也应该为反向指定它。 使用users:password_reset_done 而不是password_reset_done

    查看reversing-namespaced-urls了解更多详情。

    【讨论】:

      【解决方案2】:

      问题是 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
      • 你说的完全正确!我显然需要咖啡。非常感谢。
      猜你喜欢
      • 2014-02-12
      • 1970-01-01
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 2021-04-29
      相关资源
      最近更新 更多