在Django管理站点中添加忘记密码功能

19

如何在Django管理站点中添加忘记密码功能?包括电子邮件/安全问题选项?是否有可用的插件/扩展?

2个回答

30

它们都已经内置在Django中了。只需添加相关的URL模式。如下所示。

from django.contrib.auth import views as auth_views

patterns+=('',
url(r'^passreset/$',auth_views.password_reset,name='forgot_password1'),
url(r'^passresetdone/$',auth_views.password_reset_done,name='forgot_password2'),
url(r'^passresetconfirm/(?P<uidb36>[-\w]+)/(?P<token>[-\w]+)/$',auth_views.password_reset_confirm,name='forgot_password3'),
url(r'^passresetcomplete/$',auth_views.password_reset_complete,name='forgot_password4'),
)

顺便提一句,在此过程中,还需要添加密码更改的视图和URL模式。

url(r'^password/change/$',
   auth_views.password_change,
   name='auth_password_change'),
url(r'^password/change/done/$',
   auth_views.password_change_done,
   name='auth_password_change_done'),

它们当然可以在文档中找到。

您需要提供自己的模板。


2
是的,它还会将相关的电子邮件地址发送电子邮件。 - lprsd
1
请注意,如果您正在使用django-registration应用程序,则只需要包含django-registration的urls.py,即在您自己的urls.py中添加url(r'^accounts/', include('registration.urls')) - Lie Ryan

12

实际上自Django 1.4以来,有一种简单的方法可以在管理员登录页面中直接显示忘记密码链接(听起来就像是被问到的准确问题):

https://docs.djangoproject.com/en/2.1/ref/contrib/admin/#adding-a-password-reset-feature

您可以通过在URLconf中添加几行代码来为管理员网站添加密码重置功能。 具体来说,请添加以下四个模式:

url(r'^admin/password_reset/$',
    'django.contrib.auth.views.password_reset',
    name='admin_password_reset'), (r'^admin/password_reset/done/$',
    'django.contrib.auth.views.password_reset_done'),
(r'^reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$',
    'django.contrib.auth.views.password_reset_confirm'),
(r'^reset/done/$',
    'django.contrib.auth.views.password_reset_complete'), 

(这假设您已在admin/处添加了管理界面,并要求您将以^admin/开头的URL放在包含管理应用程序本身的行之前)。

Django 1.4中进行了更改存在admin_password_reset命名的URL将导致“忘记密码?”链接出现在默认管理员登录页面的密码框下方。


1
+1 感谢 Stefano!这个问题是在我还在使用 Django 1.2/1.3 时提出的 :) - Viet
@Viet 想的没错!但是当出现新的更简单的解决方案时,我喜欢给旧答案一个刷新! - Stefano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接