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' '应用名.类名'
Django框架(十三)——Auth模块的更多相关文章
- Django框架中auth模块的详解
auth模块 auth模块是对登录认证方法的一种封装,本身就是一个对象,可以获取用户的详细信息,有了auth模块可以验证登录信息是否存在数据库中,还可以检验用户是否已经登录,校验密码等 auth方法 ...
- 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- Django 2.0 学习(17):Django 用户认证(auth模块)
Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...
- Django框架 之 Auth用户认证
Django框架 之 Auth用户认证 浏览目录 auth模块 user对象 一.auth模块 1 from django.contrib import auth django.contrib.aut ...
- 四 Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
Django框架,models.py模块,数据库操作——创建表.数据类型.索引.admin后台,补充Django目录说明以及全局配置文件配置 数据库配置 django默认支持sqlite,mysql, ...
- [Django高级之Auth模块]
[Django高级之Auth模块] auth模块 ←详情点击查看 1.Auth模块是什么 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统 ...
- 第三百零九节,Django框架,models.py模块,数据库操作——F和Q()运算符:|或者、&并且——queryset对象序列化
第三百零九节,Django框架,models.py模块,数据库操作——F()和Q()运算符:|或者.&并且 F()可以将数据库里的数字类型的数据,转换为可以数字类型 首先要导入 from dj ...
- 第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多、一对一、多对多
第三百零八节,Django框架,models.py模块,数据库操作——链表结构,一对多.一对一.多对多 链表操作 链表,就是一张表的外键字段,连接另外一张表的主键字段 一对多 models.Forei ...
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
随机推荐
- x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式
目录 x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式 一丶x86指令复习. 1.1什么是x86指令. 1.2 x86与x64下的通用寄存器 1.3 OpCode 1.4 7种寻址方式 二 ...
- 如何在Docker容器之间拷贝数据
[编者的话]在容器之间拷贝数据是Docker一个重要而且基本的功能.拷贝数据到其他容器是一个经常使用到的场景,如当服务器遇到不可预见的“灾难”(注:断电,宕机)时,起到备份数据的作用.本文作者详细介绍 ...
- /etc/resolv.conf options rotate
timeout:n sets the amount of time the resolver will wait for a response from a remote name server ...
- 类中嵌套定义指向自身的引用(C、C++、C#)或指针(C、C++)
在定义类的时候,类中可以嵌套定义指向自身的引用(C.C++.C#)或指针(C.C++).详见代码: Node类: using System; using System.Collections.Gene ...
- 各种字符串Hash函数(转)
/// @brief BKDR Hash Function /// @detail 本 算法由于在Brian Kernighan与Dennis Ritchie的<The C Programmin ...
- zz 勵志貼,成功是努力加对的方向
5-6年工作经验程序员初进大厂,如何适应工作? 李苦李 李苦李 华为 架构师 318 人赞同了该回答 泻药! 与题主背景非常相似. 本人毕业8年+,普通二本,学历不突出,非计算机专业. 唯一不同的 ...
- vue---引入外部样式
在用 vue-cli 进行项目开发的时候,经常会遇到要引入外部的样式,那该怎么做的呢? 示例:使用 import 引入 scss import variables from '@/assets/sty ...
- Mac下 VirtualBox(VBox) 的 Centos6/7 共享文件夹配置
vbox 安装虚拟机请移步这里. https://blog.csdn.net/a47846800/article/details/88847466 前期准备: 远程登录 centos 系统, 分边执行 ...
- MySQL Shared and Exclusive Locks
官方文档 InnoDB implements standard row-level locking where there are two types of locks, shared (S) loc ...
- getBrandWCPayRequest 和 chooseWXPay 的区别
getBrandWCPayRequest 和 chooseWXPay 都是发起微信支付请求,chooseWXPay 依赖 http://res.wx.qq.com/open/js/jweixin-1. ...