重置密码基本上是网站的标配,在这里同样介绍2种重置密码的方法
一.使用第三方应用,django-password-reset
django有很多优秀好用的第三方应用,其中就有一个是用来重置密码的,使用了一下发现非常好用,只有49k大小.首先是用pip install django-password-reset来安装,我们打开其官方文档查看用法如下:
首先它是一个应用,需要将其安装到settings中,然后在urls中引入,用的时候调用即可.我的配置如下:
在需要重置密码的时候输入http://127.0.0.1:8001/pwd_reset/recover/会出现调用画面.输入框里可以输入用户名或者邮箱,然后就可以很方便的调用.但是,一个大坑来了,如果这样设置后,会报错,如下:
查看源码问题后,发现问题出现在这里:
在这个第三方应用里编写的路径都是{% url ‘password_reset_reset’ %}之类的,password_reset_reset为你urls里各个路径的名字name,由于我们在首页路径里加了前缀pwd_reset,所以应用里所有的都无法找到准确路径,自动缺失app_name.
解决办法是在你总urls里去掉前缀pwd_reset,设置为空,即可解决
二.使用django内置函数来进行密码重置
django有内置的login,logout,当然也有reset等方法,查看文档即源码,会发现其用法,这里不做过多讲解.
会用到如下views:
password_reset:用于重置密码
password_reset_done:用于重置密码后的显示
password_reset_confirm:用于更新新密码
password_reset_complete:用于成功更新密码
同登录内置函数一样,如果你更改了templates,需要提供模板,以及重定向位置,具体原理见源码,这里面password_reset以及password_reset_confirm需要提供重定向post_reset_redirect,剩下的我们自己重写前段模板即可.需要注意的password_reset不仅需要提供template_name模板,还需要提供email_template_name,发送的邮件页面,subject_template_name邮件的txt文件.
在email_template_name中,我们编写的需要用户确定的点击链接为
{{ protocol }}://{{ domain }}{% url 'account:password_reset_confirm' uidb64=uid token=token%}
protocol为你的http协议,domain为你的地址, uidb64=uid token=token为你的身份钥匙.只有邮件收件者点击这个链接才能确认这个邮箱身份.
因此,urls里password_reset_confirm的url如下:
url(r'password-reset-confirm/(?P<uidb64>[-\w]+)/(?P<token>[-\w]+)/$',.........)
都设置好后需要在settings里设置你的邮箱格式,我的如下:
-
EMAIL_HOST =
'smtp.163.com'
-
EMAIL_HOST_USER =
'.....@163.com'
-
EMAIL_HOST_PASSWORD =
'.......'
-
EMAIL_PORT =
25
-
EMAIL_USE_TLS =
True
-
DEFAULT_FROM_EMAIL =
'.......@163.com'
-
-
EMAIL_BACKEND =
'django.core.mail.backends.console.EmailBackend'
最后一个EMAIL_BACKEND的作用是将邮件直接显示在控制台,对于开发来说非常有用,在后期生产环境时,要注意去掉
注意:登录的时候url中填写http://10.0.118.86:12350/recover/
转载:https://blog.csdn.net/guyunzh/article/details/79461594