Django:密码重置ReverseMatch错误

时间:2013-12-02 01:16:19

标签: python django passwords reset

我无法使用password_reset_confirm工作。我看过很多解决方案,但似乎都没有为我工作。

urls.py :(特别是第三行)

(r'^resetpassword/passwordsent/$', 'django.contrib.auth.views.password_reset_done', name="reset_password"),
(r'^resetpassword/$', 'django.contrib.auth.views.password_reset', name="reset_password"),
(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)-(?P<token>,+)/$', 'django.contrib.auth.views.password_reset_confirm'),
(r'^reset/done/$', 'django.contrib.auth.views.password_reset_complete'),

password_reset_email.html

{% load url from future %}
{% autoescape off %}
Someone asked for password reset for email {{ email }}. Follow the link below:
{{ protocol}}://{{ domain }}{% url 'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %}
{% endautoescape %}

一切似乎都运转正常,直到我提交电子邮件并收到以下错误:

Reverse for 'django.contrib.auth.views.password_reset_confirm' with arguments '()' and keyword arguments '{u'uidb64': 'OQ', u'token': u'3n2-0fee9d3f98dad36e63d8'}' not found. 2 pattern(s) tried: ['/$reset/(?P<uidb64>[0-9A-Za-z_\\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 'reset/(?P<uidb64>[0-9A-Za-z_\\-]+)-(?P<token>,+)/$']

我正在使用Django 1.6。 任何帮助深表感谢!谢谢!

1 个答案:

答案 0 :(得分:2)

你可以从异常中看到发生了什么,虽然它有点难以发现。如果你看一下它尝试的模式:

2 pattern(s) tried: ['/$reset/(?P<uidb64>[0-9A-Za-z_\\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$', 'reset/(?P<uidb64>[0-9A-Za-z_\\-]+)-(?P<token>,+)/$']

你应该注意到第一个模式应该是一般应该匹配的模式,因为它接受一个带有-的标记。但它有一个迷路$前置其余内容,所以实际上它无法匹配任何东西:

'/$reset/...'

您没有显示建立该模式的urls.py行 - 您引用的第三行只能匹配除逗号外只包含的令牌:

(?P<token>,+)

因此,虽然我可以肯定地说您需要更正urls.py,但我无法准确说出您需要纠正的地方。如果您打算匹配urls.py行,则应更新token组正则表达式以接受您的实际令牌值,并且应该弄清楚为什么另一个正好匹配。也就是说,如果-是一个有效字符作为代码的一部分显示,我认为您会发现使用/作为uidb64字段与令牌之间的分隔符更容易,作为你的第一个正则表达式,除了迷路$