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中的闭包实例详解
Aug 29 Python
详解Python的单元测试
Apr 28 Python
教你学会使用Python正则表达式
Sep 07 Python
python的pandas工具包,保存.csv文件时不要表头的实例
Jun 14 Python
python PrettyTable模块的安装与简单应用
Jan 11 Python
python 列表输出重复值以及对应的角标方法
Jun 11 Python
python中删除某个元素的方法解析
Nov 05 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
Python动态强类型解释型语言原理解析
Mar 25 Python
windows10在visual studio2019下配置使用openCV4.3.0
Jul 14 Python
python实现录音功能(可随时停止录音)
Oct 26 Python
python 中的jieba分词库
Nov 23 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/10/09 PHP
PHP设置一边执行一边输出结果的代码
2013/09/30 PHP
ThinkPHP应用模式扩展详解
2014/07/16 PHP
php mysql_list_dbs()函数用法示例
2017/03/29 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
js中运算符&& 和 || 的使用记录
2014/08/21 Javascript
理解JavaScript的变量的入门教程
2015/07/07 Javascript
js实现登陆遮罩效果的方法
2015/07/28 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
jQuery基于Ajax方式提交表单功能示例
2017/02/10 Javascript
详解nodeJs文件系统(fs)与流(stream)
2018/01/24 NodeJs
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
Vue scoped及deep使用方法解析
2020/08/01 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[39:52]2018DOTA2亚洲邀请赛 4.3 突围赛 EG vs Newbee 第一场
2018/04/04 DOTA
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
matplotlib绘制动画代码示例
2018/01/02 Python
Flask框架配置与调试操作示例
2018/07/23 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
微信小程序python用户认证的实现
2019/07/29 Python
详解Python的三种拷贝方式
2020/02/11 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
Canvas在超级玛丽游戏中的应用详解
2021/02/06 HTML / CSS
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
大学生就业自荐信
2013/10/26 职场文书
庆元旦文艺演出主持词
2014/03/27 职场文书
新学期开学演讲稿
2014/05/24 职场文书
暑期教师培训方案
2014/06/07 职场文书
担保书格式
2015/01/20 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书