未加星标

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

字体大小 | |
[开发(python) 所属分类 开发(python) | 发布者 店小二04 | 时间 2018 | 作者 红领巾 ] 0人收藏点击收藏

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

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

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

安装第三方库

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

业务流程分析如下:

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

上面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-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 。

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

点击登录页面:


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

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


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

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


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

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

前往Email中查看新邮件:


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

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


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

按照提示输入新密码后:


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

密码重置就成功了。

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

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

官方文档在这里: docs

GitHub: django-password-reset

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

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

常见错误

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

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

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

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

本文开发(python)相关术语:python基础教程 python多线程 web开发工程师 软件开发工程师 软件开发流程

代码区博客精选文章
分页:12
转载请注明
本文标题:Django搭建个人博客:重置用户密码
本站链接:https://www.codesec.net/view/611288.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(python) | 评论(0) | 阅读(62)