如何在 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
}
备注
- 您可以使用“支持的任何”位运算符代替
&
在这个例子中。
因为 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
}
备注
- 您可以使用“支持的任何”位运算符代替
&
在这个例子中。