随着技术的发展,验证用户身份的手段越来越多,指纹、面容、声纹应有尽有,但密码依然是最重要的手段。

互联网处处都有密码的身影,甚至变成了现代人的一种负担。像笔者这样的,动辄几十个账号密码,忘记其中几个简直太正常了。

本章讲如何帮助健忘症患者,重置用户密码。

安装第三方库

前面我们已经知道如何修改文章标题、正文等内容,但是密码作为验证身份的重要口令,必须以更加稳妥的方式修改。一种比较常用的方式是发送一封修改密码的邮件到用户事先绑定的邮箱里

业务流程分析如下:

  • 向用户邮箱发送包含重置密码地址的邮件。邮件的地址需要动态生成,防止不怀好意的用户从中捣乱;
  • 向网站用户展示一条发送邮件成功的信息;
  • 用户点击邮箱中的地址后,转入重置密码的页面;
  • 向用户展示一条重置成功的信息。

上面4个步骤包含了4个视图和模板,自己写代码看来有些繁琐。

可能你会想,Django这种以开发效率著称的框架,重置密码这种常用功能是不是内置了呢?答案是肯定的。事实上内置模块的流程和上面的是完全相同的,你只需要将上面4个步骤的url配置好就可以使用了。当然内置的模板很简陋,你可以覆写模板变成自己网站的风格。

实际上Django不仅内置了密码重置,还包括登录、登出、密码修改等功能。建议读者到一定水平后多阅读Django的源码,学习其中的编程技巧。另外这部分内容Django是用类视图写的,现在阅读可能有一定困难。

源码位置:/env/Lib/site-packages/django/contrib/auth/views.py

官方文档:Django 的验证系统

使用内置的模块似乎要简单多了,那还能不能更简单呢?确实是可以的。

Django作为优秀的Web框架,有很多优秀的第三方库(即APP)被世界各地的程序员们打包发布在网上,免费供你使用。成功从来都是站在巨人的肩膀上的,既然已经有了“轮子”,何必要自己再造一个呢。

我们这里就可以用到一个叫Django-password-reset的第三方库。

打开虚拟环境,输入指令pip install -U django-password-reset

(env) E:\django_project\my_blog>pip install -U django-password-resetCollecting 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是一个“推”的协议(发送邮件),它不允许从远程服务器上“拉”来消息(接收邮件)。要接收邮件,客户端必须使用POP3IMAP

设置好后就可以开启服务器测试了。

点击登录页面:

点击最后一行的链接“这里”:

按照要求输入用户名或者Email,点击确认按钮:

提示已经把重置密码的链接发到邮箱中了。

前往Email中查看新邮件:

居然神奇的收到了邮件!继续点击邮件中的链接:

按照提示输入新密码后:

密码重置就成功了。

尝试一下新密码登录是没问题的,顺利完成了任务。

篇幅关系就没有去挨个覆写原有的模板文件了。如果有兴趣可以仔细阅读官方文档,尝试去改写模板文件,让页面更加匹配自己网站的风格。

官方文档在这里:docs

GitHub:django-password-reset

相信读者也尝到使用三方库的甜头了:只需要写很少的代码,就可以完成大量的功能。笔者是推荐在开发中多使用优秀的三方库的,可以极大的提高效率,减少重复劳动。当然使用三方库也有一些缺点,比如会因为一知半解而维护困难、不能量身定制等。在实践中到底用还是不用,就根据实际情况再做权衡了。

后面陆续还会介绍更多的三方库,还是贯彻那句话:成功是站在巨人肩膀上的。

常见错误

发送邮件因为涉及到了发送邮箱的相关设置和权限,所以容易出各种各样奇怪的问题。

好比说你的发送邮箱设置是xxx@sina.com。项目代码都是对的,但是新浪禁止了smtp服务,那邮件也会发送不成功。如果报错请尝试以下方法:

  • 设置发送邮箱为允许smtp服务
  • 检查账号、密码是否正确
  • 有的发送端口需要额外的设置,尝试更换端口
  • 更换其他服务商的邮箱

如果还不行,就请根据报错页面,搜索一下类似问题的解决方案了。

总结

本章学习了使用第三方库django-password-reset,高效完成了重置密码的功能。

下一章学习扩展并更新用户资料。

  • 有疑问请在杜赛的个人网站留言,我会尽快回复。
  • 或Email私信我:dusaiphoto@foxmail.com
  • 项目完整代码:Django_blog_tutorial

转载请告知作者并注明出处。

Django搭建个人博客:重置用户密码相关推荐

  1. Django搭建个人博客:用户的注册

    既然有登录登出,那么用户的注册肯定也是少不了的. 注册表单类 用户注册时会用到表单来提交账号.密码等数据,所以需要写注册用的表单/userprofile/forms.py: /userprofile/ ...

  2. Django搭建个人博客:用户的登录和登出

    用户管理 用户数据可以说是大部分网站最重要的资产.用户管理就是对用户数据进行增删改查等操作的功能,自然也就非常的重要了. 本章开始学习用户管理的内容,首先从用户登录开始. 在Django中用app来区 ...

  3. Django搭建简易博客

    Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...

  4. Django搭建个人博客:用django-notifications实现消息通知

    凭借你勤奋的写作,拜读你文章的用户越来越多,他们的评论也分散在众多的文章之中.作为博主,读者的留言肯定是要都看的:而读者给你留言,自然也希望得到回复. 怎么将未读的留言呈现给正确的用户呢?总不能用户自 ...

  5. 10分钟利用django搭建一个博客

    以前老是听说ROR开发有多快多块,网上还有朋友为了证明这,专门制作了10分钟利用rails框架搭建一个简易博客的教程,最近学习django框架,觉得django给开发者的便捷也很多,心血来潮来写个10 ...

  6. Django搭建个人博客:重置用户密码 1

    随着技术的发展,验证用户身份的手段越来越多,指纹.面容.声纹应有尽有,但密码依然是最重要的手段. 互联网处处都有密码的身影,甚至变成了现代人的一种负担.像笔者这样的,动辄几十个账号密码,忘记其中几个简 ...

  7. django项目转pyc_Python自动化运维系列:Django搭建小博客

    如何使用Django和Python怎么搭建一个小博客呢? 这是一个简单而困难的问题.简单的原因是,只要做过一次,基本上就能做到举一反三: 困难的原因是有没有用心和耐心去完成这个实验. 如果你成功了,那 ...

  8. 用django搭建个人博客(一)

    用django2.0搭建个人博客 博客网站的需求与规划 该个人博客为简单的入门示范网站,具有以下功能 项目名称为mblog 通过admin管理界面发帖.编辑以及删除贴文,且此界面支持markdown语 ...

  9. Django搭建个人博客:用django-allauth实现第三方登录

    现在我们已经拥有一个可以进行用户本地登录的博客系统了.如果有人欣赏你的文章,说不定就会注册成为本地用户,并和你好好交流一番. 但头疼的是,用户可能每天都在互联网上浏览很多非常棒的博客,如果每个博客都要 ...

最新文章

  1. opencv算法+人脸检测
  2. 个人作业1:小学四则运算——基于控制台
  3. Bitmap的一个简单实现
  4. [Python]理解 if __name__ == ‘__main__‘
  5. 【学习方法】学习心法总结之——如何平稳得开启数据之路
  6. FFmpeg图像处理深度应用
  7. 张陈斌计算机控制工程,计算机控制讲稿--4.pdf
  8. 解决mysql ERROR 1045(28000)问题【忘记密码,修改配置文件,无密码登录mysql修改密码】
  9. 为什么C# md5 32位加密算法,密码明文会出现31位
  10. 那些年被我坑过的Python——不得不知(第二章)
  11. 用Github的Api发现stars最多开源项目
  12. Android分享wifi给电脑,安卓手机怎么通过USB共享网络给mac电脑
  13. win7音量图标不见了 点显示它图标和通知 提示但前未处于活动
  14. XGboost和GBDT的异同
  15. Cannot add or update a child row: a foreign key constraint fails都有哪些原因
  16. c# u盘使用记录_C# 监测U盘插入与拔出事件
  17. poj 1837 Balance
  18. 数据保护与隐私无从下手?IBM Guardium在全面可靠上拔头筹!
  19. 1024 的那天,我这个三线的程序员是这样度过的
  20. mysql4.0事务_聊一聊 MySQL 中的事务及其实现原理

热门文章

  1. 阻止a标签跳转url的两种方法
  2. Oracle 数据库入门之----------------------多表查询
  3. 基于stm32的测微仪采集系统开发
  4. 用matlab画声波,基于MATLAB的声波分析研究-复旦大学物理教学试验中心.PDF
  5. 【信号与系统】傅里叶变换的离散型与周期性
  6. django-oscar学习笔记(一)
  7. Response.Redirect引起System.Threading.ThreadAbortException
  8. Userspace RCU原理
  9. 软件构造Lab2总结
  10. 类unix系统中启动脚本记录