栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Django-Auth模块

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Django-Auth模块

目录

给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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/958316.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号