Django自定义用户登录认证示例代码


Posted in Python onJune 30, 2019

前言

有时候 Django 自带的用户登录认证不能满足我们的需求,比如我不想要用户名+密码登录,我想手机号+验证码登录,这样就需要我们去修改 Django 自带的认证了。

Django 默认使用用户认证的是ModelBackend,这个类也就是我们要下手的地方,ModelBackend里面有一个authenticate的方法,这个方法就是登录时对用户认证的方法。我们要改的就是这个方法。

先看看原码理解一下认证逻辑:

Django自定义用户登录认证示例代码

第15-16行先获取认证用的用户名字段,默认是username,如果在Usermodel里面重新定义了USERNAME_FIELD,如改为USERNAME_FIELD = 'mobile',那么现在就是以手机号来登录了。

第18-22行就是根据 username 去获取 user 对象,如果没有这个 user 就做一次密码 hasher (不太理解这里的作用,不过不影响修改),然后就退出方法了。

第24-25行就是获取到用户后,验证用户传过来的密码跟数据库里的是否一致并且该用户是否有登录权限,验证都通过后就把 user 返回去,否则退出返回,不返回任何东西。

明白了认证的逻辑,就开始修改了,首先新建一个类,继承ModelBackend,然后重写authenticate方法,比如上面提到的改为手机号+验证码的方式,只要改成如下:

Django自定义用户登录认证示例代码

只是稍微的做了点修改,把第24行里的密码验证改为了验证码验证,这里password 字段用于存放验证码,而不再是用户的密码了。其它的逻辑都没变。

这里改了之后,要在Usermodel 里加上check_verify_code这个方法,否则会报错,还要修改类变量USERNAME_FIELD = 'mobile',不然还是会以username来认证,具体的实现逻辑根据自己的实际情况来,这里就不展示里面的逻辑。

好,用户的认证改好了,还有最重要的一步,在settings.py里添加一条这样的配置:

AUTHENTICATION_BACKENDS = ['common.backends.CustomModelBackends']  # 里面改成自己写的认证类。格式必须是 包名.文件名.类名

到此就完成了。

总结:(以手机号+验证码为例)

  1. 新建一个 CustomModelBackend 类,重写 authenticate 方法,根据自己实际需求写认证逻辑。
  2. 在Usermodel里添加验证验证码的方法。
  3. 在Usermodel里改变类变量USERNAME_FIELD为mobile。
  4. 在在settings.py里添加一条配置:

AUTHENTICATION_BACKENDS = ['common.backends.CustomModelBackends']

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
python字符串的常用操作方法小结
May 21 Python
python flask实现分页效果
Jun 27 Python
python之文件读取一行一行的方法
Jul 12 Python
Python图像处理之简单画板实现方法示例
Aug 30 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
python实现银联支付和支付宝支付接入
May 07 Python
Python基于scipy实现信号滤波功能
May 08 Python
华为2019校招笔试题之处理字符串(python版)
Jun 25 Python
结合OpenCV与TensorFlow进行人脸识别的实现
Oct 10 Python
pandas处理csv文件的方法步骤
Oct 16 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 Python
Python中栈、队列与优先级队列的实现方法
Jun 30 #Python
Python中请不要再用re.compile了
Jun 30 #Python
用python求一个数组的和与平均值的实现方法
Jun 29 #Python
Python:Numpy 求平均向量的实例
Jun 29 #Python
python 计算数据偏差和峰度的方法
Jun 29 #Python
Python求均值,方差,标准差的实例
Jun 29 #Python
python 计算平均平方误差(MSE)的实例
Jun 29 #Python
You might like
如何写php程序?
2006/12/08 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
this和执行上下文实现代码
2010/07/01 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
javascript中键盘事件用法实例分析
2015/01/30 Javascript
JQuery基础语法小结
2015/02/27 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
浅谈JavaScript中的属性:如何遍历属性
2017/09/14 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
浅谈vue 单文件探索
2018/09/05 Javascript
vue百度地图 + 定位的详解
2019/05/13 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
echarts大屏字体自适应的方法步骤
2019/07/12 Javascript
操作按钮悬浮固定在微信小程序底部的实现代码
2019/08/02 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
Vue中强制组件重新渲染的正确方法
2021/01/03 Vue.js
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
linux环境下安装pyramid和新建项目的步骤
2013/11/27 Python
跟老齐学Python之Python安装
2014/09/12 Python
python编写暴力破解FTP密码小工具
2014/11/19 Python
Python smallseg分词用法实例分析
2015/05/28 Python
python numpy 部分排序 寻找最大的前几个数的方法
2018/06/27 Python
python自定义函数实现一个数的三次方计算方法
2019/01/20 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
为什么要优先使用同步代码块而不是同步方法?
2013/01/30 面试题
青年创业培训欢迎词
2014/01/10 职场文书
党建工作整改措施
2014/10/28 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
少年的你:世界上没有如果,要在第一次就勇敢的反抗
2019/11/20 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
关于k8s环境部署mysql主从的问题
2022/03/13 MySQL