如何在 DRF 的 DEFAULT_PERMISSION_CLASSES 中使用逻辑运算符?

How to use logical operators in DRF's DEFAULT_PERMISSION_CLASSES?

因为 DRF==3.9--(release notes) 我们可以选择 combine/compose 在我们的观点中 类 权限。

class MyViewSet(...):
    permission_classes = [<b>FooPermission & BarPermission</b>]

我确实尝试过这样的事情,

REST_FRAMEWORK = {

    'DEFAULT_PERMISSION_CLASSES': (

        <b>'utils.permissions.FooPermission' & 'utils.permissions.BarPermission',</b>

    ),

    # other settings

}

和python引发异常

TypeError: unsupported operand type(s) for &: 'str' and 'str'

所以,

如何使用 DEFAULT_PERMISSION_CLASSES 将组合权限用作全局权限?

我通过组合那些 类 创建了一个新的 变量 并在 DEFAULT_PERMISSION_CLASSES 中引用了相同的变量,

# utils/permissions.py

from rest_framework.permissions import BasePermission


class FooPermission(BasePermission):

    def has_permission(self, request, view):
        # check permissions

        return ...


class BarPermission(BasePermission):

    def has_permission(self, request, view):
        # check permissions

        return ...


<b>CombinedPermission = FooPermission & BarPermission</b>

# settings.py

REST_FRAMEWORK = {

    'DEFAULT_PERMISSION_CLASSES': (

        <b>'utils.permissions.CombinedPermission',</b>

    ),

    # other settings

}

备注

  • 您可以使用“支持的任何”位运算符代替& 在这个例子中。