DRF权限组件源码分析

server/2024/11/14 12:39:45/

DRF权限组件源码分析

权限组件相关配置同认证组件

0 认证组件的三种返回值
  • 有权限,返回True,程序正常进行
  • 无权限,返回False,程序抛出异常
1 单视图应用

在这里插入图片描述

2 多视图应用

在这里插入图片描述

3 单视图多视图结合

在drf中,默认优先去全局中读取,再去视图类中读取。

我们可以将个别视图类的authentication_classes列表置为空

在这里插入图片描述

4 多个认证组件关系

在drf开发中,如果有些接口必须同时满足:A条件、B条件、C条件。 有些接口只需要满足:A条件或B条件或C条件,此时就可以利用权限组件来编写这些条件。

python">from rest_framework.views import APIView
from rest_framework.request import Request
from rest_framework.response import Responseclass DemoView(APIView):permission_classes = [权限类A, 权限类B, 权限类C]def get(self, request: Request):return Response({"status": True, "data": "OK"})
  • 且关系,默认支持:A条件 且 B条件 且 C条件,同时满足。

    python">class PermissionA(BasePermission):message = {"code": 1003, 'data': "无权访问"}	# 自定义错误信息def has_permission(self, request, view):if request.user.role == 2:return Truereturn False
    
  • 或关系,自定义(方便扩展)(不要改源码,在视图函数内定义check_permissions方法)

    python">class APIView(View):def check_permissions(self, request):"""Check if the request should be permitted.Raises an appropriate exception if the request is not permitted."""for permission in self.get_permissions():if permission.has_permission(request, self):	# 只要有一个是Ture,就有权限returnreturn self.permission_denied(request,message=getattr(permission, 'message', None),code=getattr(permission, 'code', None))
    
5 源码分析

在这里插入图片描述


http://www.ppmy.cn/server/27689.html

相关文章

村庄集中式生活废水处理设备技术工艺

诸城市鑫淼环保小编带大家了解一下村庄集中式生活废水处理设备技术工艺 工艺: 生物接触氧化法指由浸没在污水中的填料和曝气系统构成的污水处理方法,在有氧条件下,污水与填料表面的生物膜广泛接触,使污水得到净化。填料指在污水处…

【项目学习01_2024.05.01_Day03】

学习笔记 3.6 开发业务层3.6.1 创建数据字典表3.6.2 编写Service3.6.3 测试Service 3.7 接口测试3.7.1 接口完善3.7.2 Httpclient测试 3.8 前后端联调3.8.1 准备环境3.8.2 安装系统管理服务3.8.3 解决跨域问题解决跨域的方法:我们准备使用方案2解决跨域问题。在内容…

【面试经典 150 | 数组】找出字符串中第一个匹配项的下标

文章目录 写在前面Tag题目来源解题思路方法一:find方法二:暴力匹配方法三:KMP 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,…

PINN物理信息网络 | 利用物理信息神经网络进行流体动力学建模

背景 物理信息神经网络(Physics-Informed Neural Networks,PINN)是一种结合了神经网络和物理方程的方法,用于建模和求解物理问题。传统的基于物理方程的数值方法在处理复杂的非线性偏微分方程时可能面临数值稳定性、高计算复杂度和网格依赖性等问题。而PINN作为一种数据驱…

纯血鸿蒙APP实战开发——主页瀑布流实现

介绍 本示例介绍使用ArkUIWaterFlow组件和LazyForEach实现瀑布流场景。该场景多用于购物、资讯类应用。 效果图预览 使用说明 加载完成后显示整个列表,超过一屏时可以上下滑动。 实现思路 创建WaterFlowDataSource类,实现IDataSource接口的对象&…

Windows11下Docker使用记录(四)

Docker使用记录&#xff08;四&#xff09; 1. container与host的文件传输2. container 与 Unity ROS setting 通讯3. container和wsl2或windows11我一直无法ping通 1. container与host的文件传输 从 container 复制文件至 host docker cp <container_name>:<file_p…

QStandardItem 怎么获取对应的 QModelIndex

Qt 中&#xff0c;如果你有一个 QStandardItem 对象&#xff0c;并想获取它对应的 QModelIndex&#xff0c;可以通过 QStandardItem 的 index() 方法来实现。这个方法返回该 QStandardItem 在 model 中的 QModelIndex。 以下是一个简单的示例代码&#xff1a; #include <Q…

Ubuntu22安装docker

安装步骤 1. 更新软件包索引 首先&#xff0c;打开终端并更新你的软件包列表以确保访问到最新的软件包版本&#xff1a; sudo apt-get update 2. 安装必要的依赖项 安装几个必需的软件包&#xff0c;这些软件包让apt能够通过HTTPS使用仓库&#xff1a; bash sudo apt-ge…