drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用

Posted gaimo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用相关的知识,希望对你有一定的参考价值。

三大认证工作原理简介

源码分析:

from rest_framework.views import APIView

技术图片

 

源码分析入口:

 

技术图片

 

 

 内部的三大认证方法封装:

技术图片

三大组件的原理分析:

技术图片

 

 权限六表分析

  基于用户权限访问控制的认证(RBAC):Role-Based-Access-Control;基于auth的认证规则(了解)。

Django框架采用的是RBAC认证规则:通常分为:三表规则、五表规则、Django采用的是六表规则。

三表:用户表、角色表、权限表

五表:用户表、角色表、权限表、用户角色关系表、角色权限关系表、用户权限关系表

六表:用户表、角色表、权限表、用户角色关系表、角色权限关系表、用户权限关系表

技术图片

源码分析三者的关系

用户表:角色groups,权限user_permissions

角色表:用户user_set,权限permissions

权限表:用户user_set,角色group_set

重点:如果自定义User表后,再另一个项目中采用原生User表,完成数据库迁移时,可能失败。

解决的办法:

  (1)、卸载Django,重新安装(源码问题)

  (2)、将django.contrib下面的admin、auth下的数据迁移记录文件全部清空

from django.contrib.auth.models import AbstractUser,User

技术图片

 

 

创建自定义User表

models.py

from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
    mobile = models.CharField(max_length=11, unique=True)#设置成唯一的
class Meta: db_table = api_user verbose_name = 用户表 verbose_name_plural = verbose_name def __str__(self): return self.username

 

数据库迁移:

>> python3 manage.py makemigrations

>> python3 manage.py  migrate


>> #创建超级用户

>>> python3 manage.py createsuperuser


>>  admin   admin123

配置自定义user表

在settings.py下面输入,告诉django系统自己创建自定义的用户表。

AUTH_USER_MODEL = "api/User"

 

创建好的三表结构

技术图片

 脚本启动测试查询数据

# django脚本话启动
import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "dg_proj.settings")
django.setup()

from api import models
user = models.User.objects.first()  # type: models.User
print(user.username)
print(user.groups.first().name)
print(user.user_permissions.first().name)

from django.contrib.auth.models import Group
group = Group.objects.first()
# print(group.name)
# print(group.user_set.first().username)
# print(group.permissions.first().name)

认证组件的源码分析

技术图片

 

 点击进去,逐一分析,第一个分析的是,认证组件,

def perform_authentication(self, request):

 

技术图片

 

 需要点击定位到request下面的user方法继续往下查看其原理

技术图片

 

 内部user的方法

技术图片

 

 点击 self._authenticate查看认证源码的精髓实现认证的部分

技术图片

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

  

 

以上是关于drf三大认证:认证组件-权限组件-权限六表-自定义认证组件的使用的主要内容,如果未能解决你的问题,请参考以下文章

drf框架与postman初始

drf 三大认证详解

jwt认证规则

drf-jwt认证组件权限组件频率组件的使用

管理表页面的创建

drf 权限认证