19

我在让 password_Reset_confirm 位工作时遇到问题。

网址:

(r'^password_reset/$', 'django.contrib.auth.views.password_reset'),
(r'^password_reset_done/$', 'django.contrib.auth.views.password_reset_done'),
(r'^password_reset_confirm/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm'),

password_reset_email.html,其中包括:

{% load url from future %}
Someone asked for password reset for email {{ email }}. Follow the link below:
{{ protocol}}://{{ domain }}{% url 'password_reset_confirm' uidb36=uid token=token %}

但是在提交我的重置密码的电子邮件后,我收到了以下错误消息:

NoReverseMatch at /password_reset/ 使用参数 '()' 和关键字参数 '{'uidb36': '1', 'token': '38d-b5ec0b2a2321f522f954'}' 反向匹配'password_reset_confirm'。

我想既然这是使用构建视图,我就不必照顾其他任何事情了?

谢谢你的建议,

更新:

使用完整路径后,它似乎工作。但是它会发送两封电子邮件:每封都有不同的链接。这是为什么?我在哪里设置 {{ domain }}?谢谢

Follow the link below:
http://example.com/password_reset_confirm/1-38d-b5ec0b2a2321f522f954/

Follow the link below:
http://example.com/password_reset_confirm/2-38d-18482e1f129c84b9c2bc/

更新 2

我想到了。以防万一其他人有这个问题。您需要将您的域名设置为您的应用程序的站点:

在管理员或 django 控制台中:

>>> my_site = Site.objects.get(pk=1)
>>> my_site.domain = 'somedomain.com'
>>> my_site.name = 'Some Domain'
>>> my_site.save()

重置时可能会收到两封电子邮件的另一个问题是,您可以将多个用户名与同一个电子邮件地址关联。它很傻。这是我接下来要解决的问题。

4

5 回答 5

12

要将 url 传递给url模板标签,您可以nameurls.py

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

然后您可以使用带有 url 名称的标签

{% url 'password_reset_confirm' uidb64=uid token=token %}
于 2014-04-30T10:03:35.303 回答
5

使用url模板标签时,您需要指定视图而不是 url 本身。由于您'django.contrib.auth.views.password_reset_confirm'在 URLConf 中使用,您应该像这样使用它:

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

更多关于urlDjango 的内置模板标签和过滤器文档的模板标签。

于 2012-06-22T17:17:21.987 回答
1

确保在你的 urls.py 中有这个:

urlpatterns = [
    url('^', include('django.contrib.auth.urls'))
]

请参阅https://docs.djangoproject.com/en/1.8/topics/auth/default/#django.contrib.auth.views.password_reset 部分:身份验证视图

于 2017-01-20T14:14:46.290 回答
0

它可能是一个内置视图,但您仍然需要它的 URL。您应该在 urls.py 中定义一个并将其链接到password_reset_confirm视图。

于 2012-06-21T18:23:51.507 回答
0

只需将此 URL 复制到您的主 urls.py 文件,以便它识别 URL 名称

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

于 2014-12-31T04:50:38.210 回答