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

                
            
        
浙公网安备 33010602011771号