Django Rest Framework:如何使用OperationHolderMixin?

问题描述

在Django Rest Framework site-packages/rest_framework/permissions.py的源代码中,我可以看到OperationHolderMixin类以及子类ANDORNOT

文档中没有任何内容,我也没有找到用例的样本。有没有人曾经使用过那些“合成”类,我什么时候应该使用它们?

解决方法

您不必直接在代码库中使用这些类,只需使用具有 逻辑表达式

的类

假设您具有三个权限类,

class PermissionOne(permissions.BasePermission):
    def has_permission(self,request,view):
        # your logic
        pass


class PermissionTwo(permissions.BasePermission):
    def has_permission(self,view):
        # your logic
        pass


class PermissionThree(permissions.BasePermission):
    def has_permission(self,view):
        # your logic
        pass

然后,您可以在视图中使用以下类,

class MyAPIView(APIView):
    permission_classes = [PermissionOne | PermissionTwo | PermissionThree]

表达式 PermissionOne | PermissionTwo | PermissionThree 相对于 在幕后创建了 虚拟DRF权限类 逻辑表达式

这意味着,您可以将代码重写为

MyCompositePermissionClass = PermissionOne | PermissionTwo | PermissionThree


class MyAPIView(APIView):
    permission_classes = [MyCompositePermissionClass]

注意:DRF支持&(和),|(或)和~(不是)按位运算符来创建复合权限类。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...