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操作字符串之rindex()方法的使用
May 19 Python
使用py2exe在Windows下将Python程序转为exe文件
Mar 04 Python
简单实现python进度条脚本
Dec 18 Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 Python
详细介绍pandas的DataFrame的append方法使用
Jul 31 Python
实现Python与STM32通信方式
Dec 18 Python
pytorch快速搭建神经网络_Sequential操作
Jun 17 Python
Python-openCV开运算实例
Jul 05 Python
python中如何设置代码自动提示
Jul 15 Python
django序列化时使用外键的真实值操作
Jul 15 Python
Python结合Window计划任务监测邮件的示例代码
Aug 05 Python
详解python datetime模块
Aug 17 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下封装较好的数字分页方法
2010/11/23 PHP
PHP获取url的函数代码
2011/08/02 PHP
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
php专用数组排序类ArraySortUtil用法实例
2015/04/03 PHP
php+mysql实现无限级分类
2015/11/11 PHP
学习php设计模式 php实现装饰器模式(decorator)
2015/12/07 PHP
PHP receiveMail实现收邮件功能
2018/04/25 PHP
Laravel获取当前请求的控制器和方法以及中间件的例子
2019/10/11 PHP
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
关于jquery.validate1.9.0前台验证的使用介绍
2013/04/26 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
bootstrap选项卡扩展功能详解
2017/06/14 Javascript
js获取css的各种样式并且设置他们的方法
2017/08/22 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
使用vuex解决刷新页面state数据消失的问题记录
2019/05/08 Javascript
如何自定义微信小程序tabbar上边框的颜色
2019/07/09 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
Python常用正则表达式符号浅析
2014/08/13 Python
python实现按行切分文本文件的方法
2016/04/18 Python
Python管理Windows服务小脚本
2018/03/12 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
Python with语句用法原理详解
2020/07/03 Python
SmartBuyGlasses台湾:名牌眼镜,名牌太阳眼镜及隐形眼镜
2017/01/04 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
茶叶生产计划书
2014/01/10 职场文书
幼儿园义卖活动方案
2014/01/17 职场文书
材料专业毕业生求职信
2014/02/26 职场文书
机关职员工作检讨书
2014/10/23 职场文书
迟到检讨书
2015/01/26 职场文书
部门2015年度工作总结
2015/04/29 职场文书
基层党支部承诺书
2015/04/30 职场文书
2016年教师节慰问信
2015/12/01 职场文书
用Python创建简易网站图文教程
2021/06/11 Python