【问题标题】:Django NoReverseMatch at /accounts/password/reset/ for password resetDjango NoReverseMatch 在 /accounts/password/reset/ 用于密码重置
【发布时间】:2014-11-20 14:47:31
【问题描述】:

在 /accounts/password/reset/ 问题上只是另一个 NoReverseMatch。 我尝试了很多不同的解决方案,但没有什么对我有用。 顺便说一句,如果我尝试一个不在数据库中的随机密码,我不会收到任何错误。

Django 1.6

错误

NoReverseMatch at /accounts/password/reset/
Reverse for 'django.contrib.auth.views.password_reset_confirm' with arguments '()' and keyword arguments '{u'uidb64': 'Mg', u'token': u'3vb-60fc793f1a685844bbe1'}' not found. 0 pattern(s) tried: []

Error during template rendering

In template /home/jr/Documents/python/amapp1/local/lib/python2.7/site-packages/django/contrib/admin/templates/registration/password_reset_email.html, error at line 7
Reverse for 'django.contrib.auth.views.password_reset_confirm' with arguments '()' and keyword arguments '{u'uidb64': 'Mg', u'token': u'3vb-60fc793f1a685844bbe1'}' not found. 0 pattern(s) tried: []

urls.py

from django.conf.urls import patterns, url
from django.contrib.auth.views import login, password_reset, password_reset_confirm, password_reset_done, password_reset_complete

url(r'^password/reset/$', 'django.contrib.auth.views.password_reset',
 {'post_reset_redirect' : '/accounts/password/reset/done/'}),
url(r'^password/reset/done/$', 'django.contrib.auth.views.password_reset_done'),
url(r'^password/reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm',
 {'post_reset_redirect' : '/accounts/password/done/'}),
url(r'^password/done/$', 'django.contrib.auth.views.password_reset_complete'),

password_reset_email.html

{{ protocol}}://{{ domain }}{% url 'django.contrib.auth.views.password_reset_confirm' uidb64=uid token=token %}

它是 password_reset_email.html 模板中的链接,因为我确实收到了电子邮件,如果我删除链接也不会出错。

【问题讨论】:

    标签: python django


    【解决方案1】:

    将password_reset_email.html中的url改成:

    {{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}
    

    docs中是这样处理的

    【讨论】:

    • 感谢您的反馈。我已经尝试了 uidb36 和 uidb64,因为它被推荐用于 Django 1.6,但没有成功。目前我没有使用 Django 注册。
    • @WayBehind 对不起,我完全改变了我的答案。查看新答案。试试“password_reset_confirm”网址。
    • 感谢您的新回复。还是一样的NoReverseMatch 错误。有什么想法吗?
    • 您是否重新提交了忘记密码的表单,以便发送包含新令牌的新电子邮件 URL?
    • 是的,甚至重新启动本地服务器以创建新会话。
    【解决方案2】:

    如果您使用的是 Django 1.6,那么您使用的代码是错误的,因为密码重置在 Django 1.6 中已更改。

    请阅读这里https://docs.djangoproject.com/en/1.7/topics/auth/default/#django.contrib.auth.views.password_reset

    您必须相应地更改密码重置电子邮件的模板。

    您还必须相应地更改网址

    你现在有

    url(r'^password/reset/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm',
     {'post_reset_redirect' : '/accounts/password/done/'}),
    

    应该是这样的

    url(r'^reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/$',
        'django.contrib.auth.views.password_reset_confirm',
        name='password_reset_confirm'),
    

    【讨论】:

      猜你喜欢
      • 2019-05-28
      • 2018-07-18
      • 2014-11-29
      • 2015-04-09
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 2013-09-21
      • 2016-05-28
      相关资源
      最近更新 更多