首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NoReverseMatch at /user/password_reset/反向查找“password_reset_done”

NoReverseMatch at /user/password_reset/反向查找“password_reset_done”
EN

Stack Overflow用户
提问于 2017-07-16 12:26:25
回答 3查看 2.6K关注 0票数 1

我正在尝试使用Django身份验证系统,但是我得到了错误:在这里输入图像描述

“用户”是一个应用程序名。

项目的urls.py:

代码语言:javascript
运行
复制
from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
     url(r'^admin/', admin.site.urls),
     ...
     url(r'^user/', include('user.urls', namespace='user')),
     ...
]

user/urls.py:

代码语言:javascript
运行
复制
from django.conf.urls import url, include

from . import views


urlpatterns = [
    url(r'^register/$', views.register, name='register'),
    url(r'^settings/$', views.settings, name='settings'),
    url(r'^settings/password/$', views.password, name='password'),
    url(r'^settings/accounts/$', views.configure_accounts,
        name='configure_accounts'),
    url(r'^settings/accounts/error/$', views.configure_accounts_error,
        name='configure_accounts_error'),
    url('^', include('django.contrib.auth.urls')),
]

我可以访问/user/login/、/user/logout/。当我转到/user/password_reset/时,我可以输入电子邮件,然后按下“Submit”按钮,就会发生错误(如图所示):

代码语言:javascript
运行
复制
NoReverseMatch at /user/password_reset/
Reverse for 'password_reset_done' not found. 'password_reset_done' is not a valid view function or pattern name.

有什么办法解决这个问题吗?非常感谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-16 16:23:56

代码语言:javascript
运行
复制
url(r'^password_reset/$', auth_views.password_reset, {
        'post_reset_redirect': '/user/password_reset/done/'
    }, name='password_reset'),
    url(r'^password_reset/done/$', auth_views.password_reset_done,
        name='password_reset_done'),
    url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        auth_views.password_reset_confirm, {
         'post_reset_redirect': '/user/reset/done/'
    }, name='password_reset_confirm'),
    url(r'^reset/done/$', auth_views.password_reset_complete,
        name='password_reset_complete'),

我在user/urls.py中设置了'post_reset_redirect‘,一切都开始正常工作。在重新设置页面上提交电子邮件后,控制台中没有显示任何内容,因为:

如果系统中不存在提供的电子邮件地址,此视图将不会发送电子邮件,但用户也不会收到任何错误消息。这样可以防止信息泄漏给潜在的攻击者。

Django Docs

票数 1
EN

Stack Overflow用户

发布于 2020-02-19 21:15:32

我也碰到了这个问题。这些职位已经过时了,所以我想给出一个修订的答案。本质上,PasswordResetConfirmView具有success_url的属性,可以在urls.py设置该属性。

比如说..。

代码语言:javascript
运行
复制
path('password-reset-confirm/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(
    template_name='password-reset-confirm.html', success_url=reverse_lazy(
        'user:password_reset_complete')),
     name="password_reset_confirm"),

问题是密码重置确认的默认行为。具体来说,它设置了success_url = reverse_lazy('password_reset_complete')。因为您的password_reset_complete视图在您的“用户”应用程序中,所以它找不到它。默认属性是在需要根urls.py查看user/urls.py时告诉它查看根user/urls.py。重写success_url将解决这个问题。

票数 8
EN

Stack Overflow用户

发布于 2017-07-16 12:47:07

在您的用户/urls.py中,似乎没有名为/user/password_reset/的url

如果要使用django.auth默认密码重置,然后使用,

代码语言:javascript
运行
复制
from django.contrib.auth.views import password_reset

urlpatterns = patterns('',
     (r'^/accounts/password/reset/$', password_reset,{'template_name': 'my_templates/password_reset.html'}, name='password_reset_done'),
     ...
)

在这里,您可以更改模板名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45128577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档