目录
给auth_user表添加自定义的字段:
创建用户
密码相关API
auth模块的方法
User对象具有的字段
User对象具有的属性
models.user的方法
AnonymousUser匿名用户的方法
Auth权限管理
给auth_user表添加自定义的字段:
(1)model.py:
from django.db import models
from django.contrib.auth.models import AbstractUser
class MyUserInfo(AbstractUser):
phone = models.CharField(max_length=11,blank=True,help_text='请输入手机号')
adddr = models.CharField(max_length=11,blank=True,help_text='请输入地址')
class Meta(AbstractUser.Meta):
db_table = 'user_login_info_tables'
(2)settings.py:
AUTH_USER_MODEL = 'app01.MyUserInfo'
(3)admin字段
# 在django.contrib.auth.admin中设置 #
将第9行:from ... import Group,User 改为——》 from ... import Group
添加1行:from app01.models import UserInfoTable as User
# 找到django.contrib.auth.admin.userAdmin类 #
在fieldsets元组中添加:
('标题名',{'fields':('字段1','字段2')})
创建用户
from django.contrib.auth import User
(1)创建超级用户:
User.object.createsuperuser(username='',password='',email='')
(2)创建普通用户,密码明文:
User.object.create(username='',password='')
(3)创建普通用户,密码加密:
User.object,create_user(username='',password='')
密码相关API
from django.contrib.auth.hashers import make_password,check_password
加密:make_password('密码明文') 会返回一个加密后的字符串
校验:check_password('密码明文',make_password加密的字符串)
修改密码:set_password()
->save() # 保存 #
auth的默认库: Models.User.set_password()
make_password/check_password是模块,set_password是方法
auth模块的方法
1.authenticate 验证用户与密码
from django.contrib import auth
auth.authenticate(usernmae=username,password=password)
# 如果验证成功,则返回一个用户User表的对象,如果验证失败,则返回None #
2.login 登录
.....
user_obj = auth.authenticate(username=username,password=pwd)
if user_obj:
auth.login(request,user_obj)
return redirect('index')
3.logout 推出登录
auth.logout(request)
return redirect('login')
4.login_required 装饰器
from django.contrib.auth.decorators import login_required
# 直接在要判断是否登陆的地方前加@login_required #
配置setting.py:
LOGIN_URL = '/login/'
@login_required参数:
(1)@login_required(redirect_field_name='') # url里get请求方法参数的名称 #
(2)@login_required(login_url '') # 请求的登录的路由地址
User对象具有的字段
res = request.user
res.id
res.password
res.last_login
res.is_superuser
res.username
res.firstname
res.lastname
res.email
res.is_staff
res.is_active
res.date_joined
res.groups
res.user_premissions
request.user对象是默认的auth对象,会将对象信息放在request.user中以作调用
若登录成功后,request.user对象则是django.contrib.auth.models.User
若没有登录,则是匿名用户,对象是django.contrib.auth.models.AnonymouUser
User对象具有的属性
res = request.user
(1)res.is_authenticated
# 验证用户是否登录,普通用户返回True,匿名用户返回False #
(2)res.is_anonymous
# 判断用户是否为匿名用户 #
models.user的方法
1.返回用户名:
get_username()
get_short_name()
get_full_name()
2.更改用户密码:
set_password(raw_password)
'原始密码字符串'
3.check_password(raw_password)
'需要验证的密码源字符串'
# 验证request.user用户对象密码与raw_password是否一样 #
''' request.user.check_password()(验证自己的密码)与django.contrib.auth.hashers.check_password(验证一个加密后的字符串和明文字符串是否匹配)这两个函数不是同一个'''
AnonymousUser匿名用户的方法
class models.AnonymousUser
res = request.user
res.id 始终为None
res.pk 始终为None
res.username 始终为空字符串
res.get_username() 始终为空字符串
res.is_active 始终为False
res.is_anonymous
res.is_authenticated 始终是False
res.is_staff 始终是False
res.is_superuser 始终是False
res.groups 空
res.user_premissions 空
Auth权限管理
1.1 解释
-
Auth默认具有一个权限管理的模块
-
Auth权限控制其实就是对表的 增删改查
-
Auth的权限添加模式
-
给用户直接设置权限
-
给组绑定权限,将用户添加进组(用户可以有多个组,组可以有多个用户)
-
给角色设置权限,不用给用户设置权限。用用户取绑定角色
-
-
默认创建的权限管理是(add,delete,change,views)也就是增删改查四个权限
-
默认命名规则是: 权限名_类名小写 类名小写来自django_content_type表的model字段
-
1.2 Auth的三个Model类
django.contrib.auth.models.User # 用户类,继承django.contrib.auth.models.AbstractUser类 # django.contrib.auth.models.Group # 用户组类,储存用户组 # django.contrib.auth.models.Permission # 权限类,存储全部的权限 #
1.3 Auth6张表的关系
1.3.1 表解释
# 默认6张表是: auth_user # 用户表 auth_user_groups # 用户所属组的表 auth_user_user_permissions # 用户权限表 auth_group # 用户组表 auth_group_permission # 用户组权限表 auth_permission # 权限表,存放全部的权限的表,其他表的权限都是从此表中外键链接过去的
1.3.2 表关系解释
# 1.用户表
auth_user 表: django.contrib.auth.models.User 类
- auth_user.groups 字段,
-用来多对多(m2m)关联到用户组表
-多对多关联的就是:django.contrib.auth.models.Group类,auth_group表
-生成的多对多的第三张表就是:auth_user_groups表
- auth_user.user_permissions 字段,
-用来多对多(m2m)关联到权限表
-多对多关联的就是:django.contrib.auth.models.Permission类,auth_permission表
-生成的多对多的第三张表就是:auth_user_user_permissions表
# 2.用户组表
auth_group 表: django.contrib.auth.models.Group 类
- auth_user.permissons 字段,
-用来多对多(m2m)关联到权限表
-多对多关联的就是:django.contrib.auth.models.Permission类,auth_permission表
-生成的多对多的第三张表就是:auth_groups_permissions表
# 3.权限表
auth_permission 表:django.contrib.auth.models.Permission类
- auth_permission.content_type 字段
- 用来一对多关联到内容类型表 django_content_type
2.1 额外权限
class userInfo(models.Model):
name = models.CharField(max_length=64)
age = models.IntegerField()
text = models.CharField(max_length=512)
class Meta:
# 1. verbose_name 展示的是'app01|用户表|can add 用户表'中的“用户表”部分
verbose_name = '用户表'
verbose_name_plural = verbose_name
# 2.添加额外权限
permissions = [
('can_deliver_pizzas','can deliver pizza')
# 额外添加了auth_permission 表的权限:
# auth_permission 表的codename字段,值为"can_deliver_pizzas"
# auth_permission 表的name字段,值为"can deliver pizzas"
]
2.2 默认权限
class UserInfo(models.Model):
name = models.CharField(max_length=64)
age = models.CharField()
text = models.CharField(max_length=512)
class Meta:
verbose_name = '用户表'
verbose_name_plural = verbose_name
# 1.定义默认权限
# 默认是:
# default_permissions = ('add','delete','change','view')
default_permissions = ('add_01','change_02','delete_03','view_04')
3.1 创建组
from django.contrib.auth.models import User,Group # 创建组 group_obj = Group.objects.create(name='group01')
3.2 将用户添加进组
from django.contrib.auth.models import User,Group
# 1.将用户添加进组
user_obj = User.object.get(id=1)
group_obj = Group.objects.create(name='group01')
user_obj.groups.add(group_obj)
# 2.查看用户的组
# 方式一:查看多个用户的全部组
u1 = User.objects.filter(id=1).values("groups_name")
# 方法二:查看一个用户的全部组
u2 = User.objects.get(id=1).groups.all()
# 3.结果;
"""
u1结果:
u2结果:]>
"""
查看用户下的所有组的所有权限
# 方式一:
res = User.objects.filter(id=2).values('groups_name','groups_permissions_codename')
# 方式二:
Permission.objects.filter(group_user=user_obj)
# 方式三:
User.objects.get(id=2).groups.all().values('name','permissions_codename')
3.3 给组添加权限
from django.contrib.auth.models import Permission,Group
# 1.找到需要的权限
p = Permission.objects.filter(id_in = [1,4,16,27])
# 2.找到需要添加的组
group_obj = Group.objects.get(id=4)
# 3.将权限赋予组
group_obj.permissions.add(*p)
# 4.查看用户组权限
# 方式一:查看多个组的全部权限(查看用户本身的权限,不包含组)
g1 = Group.objects.filter(id=2).values("permission_codename")
# 方式二:只查看一个组本身的权限
g2 = Group.objects.get(id=2).permissions.all()
# 5.结果
"""
g1结果:
g2结果:,]>
"""
3.4 给用户添加权限
from django.contrib.auth.models import Permission,Group,User
# 1.找到需要的权限
p = Permission.objects.filter(id_in = [1,4,16,27])
# 2.找到需要添加的用户
user_obj = User.objects.get(id=2)
# 3.将权限绑定给用户
User_obj.permissions.add(*p)
# 4.查看用户权限
# 方式一:查看多个用户的全部权限(查看用户本身的权限,不包含组)
p1 = User.objects.filter(id=2).values("permission_codename")
# 方式二:只查看一个用户本身的权限(不包含组的权限)
p2 = User.objects.get(id=2).user_permissions.all()
# 5.结果
"""
p1结果:
p2结果:,....]>
"""
4.1 查看用户的所有组
from django.contrib.auth.models improt User
# 1.查找用户对象
u = User.objects.get(id=2)
# 2.查找用户下所有组:
# 方式一:(只能查看一个用户的)
res1 = u.groups.all()
# 方式二:查看多个用户的多个组
res2 = User.objects.filter(id=2).values("groups_name")
4.2 查看用户的权限
from django.contrib.auth.models import User u = User.objects.get(id=2) # 1.查找用户全部权限 U.get_all_permissions() # 2.查看用户的全部组的全部权限 u.get_group_permissions() # 3.查看用户不包含组的全部权限 from django.cointrib.auth.backends import ModelBackend m1 = ModelBackend() m1.get_user_permissions(u)



