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实现的二叉树算法和kmp算法实例
Apr 25 Python
python使用urlparse分析网址中域名的方法
Apr 15 Python
Python输出各行命令详解
Feb 01 Python
python指定写入文件时的编码格式方法
Jun 07 Python
Python决策树之基于信息增益的特征选择示例
Jun 25 Python
pandas 将索引值相加的方法
Nov 15 Python
总结python中pass的作用
Feb 27 Python
PyQT5 QTableView显示绑定数据的实例详解
Jun 25 Python
Python FFT合成波形的实例
Dec 04 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
如何在Python3中使用telnetlib模块连接网络设备
Sep 21 Python
Pytorch如何切换 cpu和gpu的使用详解
Mar 01 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
《五等分的花嫁》漫画完结!2020年10月第2期TV动画制作组换血!
2020/03/06 日漫
php实现购物车产品删除功能(2)
2020/07/23 PHP
PHP数组基本用法与知识点总结
2020/06/02 PHP
在网页中使用document.write时遭遇的奇怪问题
2010/08/24 Javascript
jquery自定义类似$.ajax()的方法实现代码
2013/08/13 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
2015/11/29 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
bootstrapValidator.min.js表单验证插件
2017/02/09 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
JavaScript模块详解
2017/12/18 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
JS实现transform实现扇子效果
2020/01/17 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
python基于twisted框架编写简单聊天室
2018/01/02 Python
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2020/02/07 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
2020/07/13 Python
巧用CSS3 border实现图片遮罩效果代码
2012/04/09 HTML / CSS
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
比较基础的php面试题及答案-编程题
2012/10/14 面试题
laravel使用redis队列实例讲解
2021/03/23 PHP
环境科学专业研究生求职信
2013/10/02 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
教师评语大全
2014/04/28 职场文书
律师授权委托书范本
2014/10/07 职场文书
公司总经理岗位职责
2015/04/01 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
活动主持人开场白
2015/05/28 职场文书
二婚主持词
2015/06/30 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书
纯CSS实现酷炫的霓虹灯效果
2021/04/13 HTML / CSS
基于Python实现的购物商城管理系统
2021/04/27 Python
Python中基础数据类型 set集合知识点总结
2021/08/02 Python
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python