Djanog中的权限是通过auth组件来实现的,在Djanog默认注册的app中,auth就是了

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    "app01.apps.App01Config"
]

  

1.用户的创建

方式一:通过命令

python .\manage.py createsuperuser

 

 

 

  

方式二:通过视图函数

auth中有models文件,里面定义了User的模型类,通过继承关系,最终还是继承了Model模型类,里面定义了很多的字段,

 

 

 最后数据库迁移,生成表auth_user

 

 

 

所以我们在视图函数中,可以像操作其他模型类一样,进行数据的增删改查,如下

from django.contrib.auth import models

def add_user(request):
    models.User.objects.create_user(username="victor")
    

  

 

2.权限的生成

当我们在执行python .\manage.py migrate 时,Djanog通过信号的方式,向auth_permissions表中添加权限

首先我们在执行上述命令后,会生成auth_permissions表,同时会有数据

 

 

 这些数据是Django自动生成的,下面我们来看一下源码

 

 

 当auth app被加载的时候,会执行ready函数,这里面会注册migrate命令的信号,关于信号可以在我之前写的信号一篇的查看

 

 

 

 

3.权限的分配

权限的分配,我们可以登录admin之后进行手动的录入,如下

 

 

 我们可以给用户User之间分配权限,User和权限之间是多对多的关系,所以,Djanog还会生成一个auth_user_permissions的表格,如下

 

 

 

当然我们也可以先将权限分配给组,然后将用户划分到组中,所以还有有group表和group_permissions表格,如下

 

 

4.权限的验证

当一个用户,访问没有授权的路由时,就会出现403禁止

观看源码,我们在请求路由的时候,请求会走到对应的视图中,然后在视图中来判断该用户是否有对应的权限,其本质就是去对应的表中查询该用户是否有权限

 

posted on 2023-03-03 14:27  阿明明  阅读(26)  评论(0编辑  收藏  举报