Skip to main content
 首页 » 编程设计

python之Django:密码重置ReverseMatch错误

2024年11月01日23webabcd

我无法让 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。 任何帮助深表感谢!谢谢!

请您参考如下方法:

您可以从异常中看出发生了什么,尽管它有点难以发现。如果您查看它尝试的模式:

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 组正则表达式以接受您的实际 token 值,并且应该弄清楚为什么另一个是完全匹配。就是说,如果 - 是作为 token 的一部分出现的有效字符,我认为您会发现总体上使用 / 作为 之间的分隔符会更容易uidb64 字段和您的 token ,就像您的第一个正则表达式一样,除了杂散的 $。