摘要:本章讲如何帮助健忘症患者,重置用户密码。实际上不仅内置了密码重置,还包括登录登出密码修改等功能。总结本章学习了使用第三方库,高效完成了重置密码的功能。有疑问请在杜赛的个人网站留言,我会尽快回复。
随着技术的发展,验证用户身份的手段越来越多,指纹、面容、声纹应有尽有,但密码依然是最重要的手段。
互联网处处都有密码的身影,甚至变成了现代人的一种负担。像笔者这样的,动辄几十个账号密码,忘记其中几个简直太正常了。
本章讲如何帮助健忘症患者,重置用户密码。
安装第三方库前面我们已经知道如何修改文章标题、正文等内容,但是密码作为验证身份的重要口令,必须以更加稳妥的方式修改。一种比较常用的方式是发送一封修改密码的邮件到用户事先绑定的邮箱里。
业务流程分析如下:
向用户邮箱发送包含重置密码地址的邮件。邮件的地址需要动态生成,防止不怀好意的用户从中捣乱;
向网站用户展示一条发送邮件成功的信息;
用户点击邮箱中的地址后,转入重置密码的页面;
向用户展示一条重置成功的信息。
上面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_projectmy_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 ... ...
邮件不能凭空产生,目前为止我们并没有配置发件邮箱的账号密码,也没有配置发送邮件的端口、发件人等信息。
因此还需要在/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 = "杜赛的个人网站"
简单邮件传输协议 (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服务,那邮件也会发送不成功。如果报错请尝试以下方法:
设置发送邮箱为允许smtp服务
检查账号、密码是否正确
有的发送端口需要额外的设置,尝试更换端口
更换其他服务商的邮箱
如果还不行,就请根据报错页面,搜索一下类似问题的解决方案了。
总结本章学习了使用第三方库django-password-reset,高效完成了重置密码的功能。
下一章学习扩展并更新用户资料。
有疑问请在杜赛的个人网站留言,我会尽快回复。
或Email私信我:dusaiphoto@foxmail.com
项目完整代码:Django_blog_tutorial
转载请告知作者并注明出处。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44941.html
摘要:比较流行的解决方案是允许用户通过第三方登录,即可以通过微博这类知名社区的授权,从而登录你的小站,免去了注册的麻烦。微博微信的登录方式大致都遵循这个流程本章虽然加载了微博的接口,但是限于篇幅并没有配置,请读者查阅官方文档去实现。 现在我们已经拥有一个可以进行用户本地登录的博客系统了。如果有人欣赏你的文章,说不定就会注册成为本地用户,并和你好好交流一番。 但头疼的是,用户可能每天都在互联网...
摘要:声明本博客的注册登录退出功能将使用,参考资源如下文档教程安装配置信息安装后设置,将相关加入到里去。指定与特定配置文件相关联的对象之数据库的。因此并没有提供用户详情应用用户详情请参考个人博客五用户个人资料扩展 声明:本博客的注册登录退出功能将使用django-allauth,参考资源如下:django-allauth文档django-allauth教程 1、安装django-allau...
摘要:声明本博客的注册登录退出功能将使用,参考资源如下文档教程安装配置信息安装后设置,将相关加入到里去。指定与特定配置文件相关联的对象之数据库的。因此并没有提供用户详情应用用户详情请参考个人博客五用户个人资料扩展 声明:本博客的注册登录退出功能将使用django-allauth,参考资源如下:django-allauth文档django-allauth教程 1、安装django-allau...
摘要:既然有登录登出,那么用户的注册肯定也是少不了的。用户在注册成功后会自动登录并返回博客列表页面。总结本章用到了表单类对数据进行验证清洗等知识,完成了用户的注册功能。 既然有登录登出,那么用户的注册肯定也是少不了的。 注册表单类 用户注册时会用到表单来提交账号、密码等数据,所以需要写注册用的表单/userprofile/forms.py: /userprofile/forms.py .....
阅读 2047·2021-10-12 10:12
阅读 768·2021-09-24 09:47
阅读 1170·2021-08-19 11:12
阅读 3423·2019-08-29 13:06
阅读 663·2019-08-26 11:43
阅读 2490·2019-08-23 17:20
阅读 1127·2019-08-23 16:52
阅读 2560·2019-08-23 14:27