随着技术的发展,验证用户身份的手段愈来愈多,指纹、面容、声纹应有尽有,但密码依然是最重要的手段。html
互联网到处都有密码的身影,甚至变成了现代人的一种负担。像笔者这样的,动辄几十个帐号密码,忘记其中几个简直太正常了。python
本章讲如何帮助健忘症患者,重置用户密码。git
前面咱们已经知道如何修改文章标题、正文等内容,可是密码做为验证身份的重要口令,必须以更加稳妥的方式修改。一种比较经常使用的方式是发送一封修改密码的邮件到用户事先绑定的邮箱里。程序员
业务流程分析以下:github
上面4个步骤包含了4个视图和模板,本身写代码看来有些繁琐。django
可能你会想,Django这种以开发效率著称的框架,重置密码这种经常使用功能是否是内置了呢?答案是确定的。事实上内置模块的流程和上面的是彻底相同的,你只须要将上面4个步骤的url
配置好就可使用了。固然内置的模板很简陋,你能够覆写模板变成本身网站的风格。编程
实际上Django不只内置了密码重置,还包括登陆、登出、密码修改等功能。建议读者到必定水平后多阅读Django的源码,学习其中的编程技巧。另外这部份内容Django是用类视图写的,如今阅读可能有必定困难。bash
源码位置:/env/Lib/site-packages/django/contrib/auth/views.py服务器
官方文档:Django 的验证系统app
使用内置的模块彷佛要简单多了,那还能不能更简单呢?确实是能够的。
Django做为优秀的Web框架,有不少优秀的第三方库(即APP)被世界各地的程序员们打包发布在网上,免费供你使用。成功历来都是站在巨人的肩膀上的,既然已经有了“轮子”,何须要本身再造一个呢。
咱们这里就能够用到一个叫Django-password-reset
的第三方库。
打开虚拟环境,输入指令pip install -U django-password-reset
:
(env) E:\django_project\my_blog>pip install -U django-password-reset
Collecting django-password-reset
...
Installing collected packages: django-password-reset
Successfully installed django-password-reset-2.0
复制代码
看到以上信息说明安装成功了。
既然第三方库也是app,那确定须要在/my_blog/settings.py
中注册了:
/my_blog/settings.py
...
INSTALLED_APPS = [
...
'password_reset', # 新增
'article',
'userprofile',
]
...
复制代码
在根路由/my_blog/urls.py
中添加app的地址:
/my_blog/urls.py
...
urlpatterns = [
...
path('password-reset/', include('password_reset.urls')),
]
复制代码
修改/templates/userprofile/login.html
,提供一个重置密码的入口:
/templates/userprofile/login.html
...
<div class="col-12">
...
<form method="post" action=".">
...
</form>
<!-- 新增 -->
<br>
<h5>忘记密码了?</h5>
<h5>点击<a href='{% url "password_reset_recover" %}'>这里</a>重置密码</h5>
</div>
...
复制代码
邮件不能凭空产生,目前为止咱们并无配置发件邮箱的帐号密码,也没有配置发送邮件的端口、发件人等信息。
所以还须要在/my_blog/settings.py
末尾添加发送邮箱的相关配置:
/my_blog/settings.py
...
# SMTP服务器,改成你的邮箱的smtp
EMAIL_HOST = 'smtp.qq.com'
# 邮箱名
EMAIL_HOST_USER = 'dusaiphoto@foxmail.com'
# 邮箱密码
EMAIL_HOST_PASSWORD = '你的邮箱密码'
# 发送邮件的端口
EMAIL_PORT = 25
# 是否使用 TLS
EMAIL_USE_TLS = True
# 默认的发件人
DEFAULT_FROM_EMAIL = '杜赛的我的网站 <dusaiphoto@foxmail.com>'
复制代码
简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 是在Internet传输Email的协议标准。
SMTP是基于文本的协议。在其之上指定了一条消息的一个或多个接收者,而后消息文本会被传输。SMTP使用TCP端口25。
SMTP是一个“推”的协议(发送邮件),它不容许从远程服务器上“拉”来消息(接收邮件)。要接收邮件,客户端必须使用POP3或IMAP。
设置好后就能够开启服务器测试了。
点击登陆页面:
点击最后一行的连接“这里”:
按照要求输入用户名或者Email,点击确认按钮:
提示已经把重置密码的连接发到邮箱中了。
前往Email中查看新邮件:
竟然神奇的收到了邮件!继续点击邮件中的连接:
按照提示输入新密码后:
密码重置就成功了。
尝试一下新密码登陆是没问题的,顺利完成了任务。
篇幅关系就没有去挨个覆写原有的模板文件了。若是有兴趣能够仔细阅读官方文档,尝试去改写模板文件,让页面更加匹配本身网站的风格。
官方文档在这里:docs
GitHub:django-password-reset
相信读者也尝到使用三方库的甜头了:**只须要写不多的代码,就能够完成大量的功能。**笔者是推荐在开发中多使用优秀的三方库的,能够极大的提升效率,减小重复劳动。固然使用三方库也有一些缺点,好比会由于只知其一;不知其二而维护困难、不能量身定制等。在实践中到底用仍是不用,就根据实际状况再作权衡了。
后面陆续还会介绍更多的三方库,仍是贯彻那句话:成功是站在巨人肩膀上的。
发送邮件由于涉及到了发送邮箱的相关设置和权限,因此容易出各类各样奇怪的问题。
比如说你的发送邮箱设置是xxx@sina.com。项目代码都是对的,可是新浪禁止了smtp服务,那邮件也会发送不成功。若是报错请尝试如下方法:
若是还不行,就请根据报错页面,搜索一下相似问题的解决方案了。
本章学习了使用第三方库django-password-reset
,高效完成了重置密码的功能。
下一章学习扩展并更新用户资料。
转载请告知做者并注明出处。