页面没有找到(404)错误,如果重置密码电子邮件链接是错误的Django

问题描述:

我正在使用django默认密码重置功能。我通过电子邮件获得设置新密码电子邮件链接。页面没有找到(404)错误,如果重置密码电子邮件链接是错误的Django

如果网址是正确的,那就好了。现在,如果我把一个错误的或无效的链接,然后我得到的,

The current URL, account/reset/NTQ/4ox-7f135b9b74e7a4aa909fdd/, didn't match any of these. 

账户/ urls.py -

url(r'^password_reset/$', auth_views.password_reset, 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, name='password_reset_confirm'), 
#url(r'^reset/',auth_views.password_reset_confirm, name='empty_password_reset_confirm'), 
url(r'^reset/done/$', auth_views.password_reset_complete, name='password_reset_complete'), 

模板password_reset_confirm.html -

{% extends 'base.html' %} 

{% block content %} 
    {% if validlink %} 
    <h3>Change password</h3> 
    <form method="post"> 
     {% csrf_token %} 
     {{ form.as_p }} 
     <button type="submit">Change password</button> 
    </form> 
    {% else %} 
    <p> 
     The password reset link was invalid, possibly because it has already been used. 
     Please request a new password reset. 
    </p> 
    {% endif %} 
{% endblock %} 

我试着用 -

url(r'^reset/',auth_views.password_reset_confirm, name='empty_password_reset_confirm') 

但是在那种情况下,我是越来越AssertionError at /account/reset/NTQ/4ox-7f135b9b74e7a4aa909fdd/

任何帮助,高度赞赏。

+0

您已经描述了当前的预期行为。但是你想要什么呢? –

+0

如果url是错误的,它不应该显示404错误。相反,它应该显示'password_reset_confirm.html'文件的'else'部分。 –

您必须修改URL的正则表达式来使它成为工作就像每个URL

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

你提到的上面将工作的例子链接。根据您的要求,您可以按照相同的方式修改正则表达式以满足更多的案例。

当你的网址转到错误标记的链接时,它会抛出错误,因此模板的其他部分将显示出来。

+0

辉煌。有效。但我不知道为什么{1,20}不是{1,23}。这是我能看到的唯一改变。 –

+0

他们必须将其设置为全部。你可以随意修改。 –