为什么我无法实现Django的忘记密码功能?

1 投票
3 回答
1872 浏览
提问于 2025-04-16 10:46
Reverse for 'django.contrib.auth.views.password_reset_confirm' with arguments '()' and keyword arguments '{'uidb36': '1', 'token': '2u6-e139d87034d52a80c572'}' not found.

我已经正确地做到了这一点:

(r'^password/reset/?$',password_reset ),
(r'^password/reset/done/?$',password_reset_done ),
(r'^password/reset/confirm/?$',password_reset_confirm ),
(r'^password/reset/complete/?$',password_reset_complete),

3 个回答

0

在你的模板文件中,可能有这样的模板标签

{% url django.contrib.auth.views.password_reset_confirm %}

可以试着搜索一下类似的东西,举个例子:

find . -iname "*.html" -exec grep -iH "django.contrib.auth.views.password_reset_confirm" {} \;

如果你找到了这样的东西,就检查一下有没有传递参数

1

你在传递参数给它。但是那些urlconf的条目并不需要参数。要么把参数从反向调用中去掉,要么把它们加到urlconf里。

11

Django在处理参数时是自己传递的;你需要接收这些参数并把它们传递给重置密码的表单。

为了更清楚地理解错误信息的意思,它在期待一个网址,这个网址是'django.contrib.auth.views.password_reset_confirm',而这个网址必须能够接收提供的参数,在这个例子中是'uidb36'和'token'。如果这个网址不能接收这些参数,Django就会一直查找,直到它检查完所有的网址,最后就会报错。

像下面这样的代码应该可以正常工作:

(r'^password/reset/confirm/(?P<uidb36>\d+)/(?P<token>[\d\w-]+)$',password_reset_confirm ),

就我个人来说,我更希望这些参数是通过GET方式传递,而不是直接在网址里,不过无所谓啦 :).

撰写回答