Django框架(十一)——Auth模块
Auth模块
一、什么是auth模块
Auth模块是Django自带的用户认证模块
Auth模块是Django自带的用户认证模块,可以实现包括用户注册、用户登录、用户认证、注销、修改密码等功能。默认使用 auth_user 表来存储用户数据。
二、Auth模块使用
1.创建超级用户 (createsuperuser)
创建超级用户就是在auth_user表中插入数据,密码是加密的。
在 Run manage.py Task 创建
createsuperuser
2.查询用户(authenticate())
验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。如果认证成功(用户名和密码正确有效),便会返回一个 User 对象
from django.contrib import auth user_obj = auth.authenticate(request, username=name, password=pwd)
不能使用filter这种查询方法,因为user表存的密码是加密的
models.User.objects.filter(username=username,password=password).first()
3.登录用户(login())
该函数接收一个HttpRequest对象,以及一个经过查询认证的user_obj
登录之后,会将用户状态记录到session中
from django.contrib import auth auth.login(request,user_obj)
4.登录成功
只要执行了上面那句话登录成功,你就可以在后端任意位置通过request.user获取到当前用户对象
user_obj = request.user
5.判断用户是否登录(is_authenticated)
用来判断当前请求是否通过了认证,如果通过就是true,反之false
request.user.is_authenticated
6.登录认证装饰器
快捷的给某个视图添加登录校验。
若用户没有登录,则会跳转到django默认的登录URL'/accounts/login/',并传递当前访问url的绝对路径(登录成功后,会重定向回到该路径)
如果自定义了登录URL,则需要在settings.py文件中通过LOGIN_URL 设置登录路径
from django.contrib.auth.decorators import login_required @login_required(login_url='/xxx/') # 局部配置 直接在装饰器里面写一个登录路径 def index(request): pass
# 全局配置 settings文件中写 LOGIN_URL = '/xxx/' 设置完后直接写装饰器 @login_required 就可以
7.注册超级用户和普通用户
错误方法:User.objects.create(username =username,password=password) # 创建用户名的时候 千万不要再使用create 了 User.objects.create_user(username =username,password=password) # 创建普通用户 User.objects.create_superuser(username =username,password=password,email='123@qq.com') # 创建超级用户 邮箱必填
8.校验密码(check_password())
#校验密码 request.user.check_password(old_password)
9.修改密码(set_password())
注意:修改密码的时候,一定要save保存,否则不会生效
request.user.set_password(new_password)
request.user.save()
10.退出登录(logout())
当调用该函数时,当前请求的session信息会全部清除,相当于request.session.flush().该用户即使没有登录,使用该函数也不会报错
auth.logout(request)
11.User对象的其他属性
# 在网站上线以前,将is_active和is_staff设置为False is_active # 禁止登录网站(用户还存在,封号) is_staff # 是否对网站有管理权限(能不能登录admin) request.user.is_active = False request.user.is_staff = False
三、自定义auth_user表
1.方法一:定义一个表模型,跟User一对一关联(不推荐使用)
from django.contrib.auth.models import User class UserDetail(models.Model): phone=models.CharField(max_length=32) # 一对一跟auth_user表做关联 # 如果是从外部引入的表模型,是不能加引号的 # 如果加引号,只是在当前model找 user=models.OneToOneField(to=User)
2.方法二:使用类的继承,继承(AbstractUser)
from django.contrib.auth.models import AbstractUser class Userinfo(AbstractUser): # 千万不要跟原来表中的字段重复 只能创新 phone = models.BigIntegerField() avatar = models.CharField(max_length=32)
注意:
1.一旦我们通过继承来实现扩展auth_user表,那么做数据库迁移,以后就没有auth_user这个表了,以后认证组件用的表就是UserInfo。原来使用 auth_user 表模型的地方全部要用新的表模型——UserInfo 2.告诉django不再使用auth默认的表,而是使用你自定义的表,需要在settings.py中设置 AUTH_USER_MODEL = 'app01.Userinfo' '应用名.类名'
原文地址:https://www.cnblogs.com/wangcuican/p/11587959.html
- [喵咪大数据]HUE大数据管理工具
- Dubbo源码解析 —— Zookeeper 订阅
- 注册中心 Eureka 源码解析 —— 项目结构简介
- 【平台】Seldon.io发布新开源平台,用于Kubernetes上的机器学习
- 分布式事务 TCC-Transaction 源码分析 —— TCC 实现
- 了解学习速率以及它如何提高深度学习的表现
- 分布式消息队列 RocketMQ源码解析:事务消息
- WordPress用Windows主机设置伪静态方法
- PHP页面跳转代码
- 分布式事务 TCC-Transaction 源码解析 —— 调试环境搭建
- 机器学习入门——使用python进行监督学习
- 推荐算法的介绍,第一部分——协同过滤与奇异值分解
- 在ASP中实现UNIX时间戳
- 【学术】厉害了我的哥,国外技术大咖仿造了谷歌的Arts &Culture,找到古代的“你”
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java编程思想第四版第六章习题
- Docker部署Python项目
- 03 . 二进制部署kubernetes1.18.4
- 01 . 美团全链路监控CAT简介及部署
- 02 . Ansible高级用法(运维开发篇)
- java编程思想第四版第七章总结
- OpenVPN原理及部署使用
- 04 . Jenkins部署Java项目
- java编程思想第四版第七章习题
- 03 . Jenkins构建之代码扫描
- mysql提示Packet for query is too large (1142 > 1024)解决方案
- Kubernetes 1.19.0——deployment(1)
- 02 . Jeknins简介部署及自动化部署PHP代码
- java编程思想第四版第八章习题
- java编程思想第四版第八章总结