【Django | allauth】重写 allauth 重置密码方法
🤵♂️ 个人主页: @计算机魔术师👨💻 作者简介:CSDN 内容合伙人,全栈领域优质创作者。🌐 推荐一款找工作神器网站: 宝藏网站 |笔试题库|面试经验|实习招聘内推|
该文章收录专栏✨---【Django | 项目开发】从入门到上线 专栏---✨
@[toc]
一、场景需求
在 allauth 中默认重置密码的方式是用户发送重置密码的请求后,发送重置密码的链接到用户的邮箱里面重置密码,如果使用 QQ 邮箱的 SMTP 服务,一天最多只能发送 50 封邮件,这样是明显不满足需求的,而如果为了实现此功能去部署一台邮件服务器或者申请一个企业邮箱,动辄几千一年的费用实在伤不起。所以在中小型的项目中,有一种折中的方法,即用户通过输入自己的身份证[这里已电话为例]即可重置对应的账号密码。
二、重写表单模型
在
form.py
添加表单模型 (处理手机号)
三、重写 view 视图函数类
allauth 中的重置密码的类视图位于 allauth.account.views.PasswordResetView,我们需要在 views.py 中继承这个类并且重写它的 post 方法。
在
view.py
视图函数
注意!!: 这里的default_token_generator
函数是 allauth 中的form.py
的函数,不是django.contib,auth.token
的,不然会报 bad token
错误,因为生成token
的方法是不一样的(还有邮箱等)
在
setting.py
添加配置(重写表单选项)
五、配置项目路由
注意!!!: 在 引入 扩展模型应用路由时 allauth 应用 和 userprofile 谁在上方一定要考虑好,不然路由覆盖等会出现页面失效或者报错的情况!!(一般默认 allauth 在上方),这里为了实现密码重置,要让 account/password/reset
不能走 allauth 的注册视图类,又不能修改 allauth 源码,此时我们使用继承并在 项目 路由修改 优先级,优先进去扩展应用模型的 重写密码类。
项目
urls.py
效果:
参考文献:Django的objects.get和objects.filter方法详解和区别Python中的*(星号)和**(双星号)完全详解raise 报异常异常用法allauth 密码重置 *as_view()解析
版权声明: 本文为 InfoQ 作者【计算机魔术师】的原创文章。
原文链接:【http://xie.infoq.cn/article/defad0f0c1dd9e541876c24b4】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论