在 drf 中的多个自定义权限类之间传递变量

hel*_*llo 4 python django django-rest-framework django-rest-viewsets

我有一个两个 ViewSet 共享的基本权限类,以及每个 ViewSet 自定义的另一个权限类,因此总共有 3 个权限,有没有一种方法可以将特定变量从基本权限类向下传递到另一个权限类权限类?我的设置如下所示:

class BasePerm(permissions.BasePermission):
    def has_permission(self, request, view):
        some_var = # call an API using request variable

class Perm1(permissions.BasePermission):
    def has_permission(self, request, view):
        # get the value of some_var from BasePerm


class Perm2(permissions.BasePermission):
    def has_permission(self, request, view):
        # get the value of some_var from BasePerm


class MyViewSet1(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = [BasePerm, Perm1]


class MyViewSet2(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = [BasePerm, Perm2]
Run Code Online (Sandbox Code Playgroud)

小智 6

我不明白你为什么不使用 mixin。对于你问的:

class BasePerm(permissions.BasePermission):

    def has_permission(self, request, view):
        self.some_var = # call an API using request variable
        return True

class Perm1(BasePerm):

    def has_permission(self, request, view):
        # get the value of some_var from BasePerm
        return super().has_permission(request, view) and some_staff_with(self.some_var)


class Perm2(BasePerm):

    def has_permission(self, request, view):
        # get the value of some_var from BasePerm
        return super().has_permission(request, view) and some_other_staff_with(self.some_var)

class MyViewSet1(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = [Perm1]


class MyViewSet2(mixins.CreateModelMixin, viewsets.GenericViewSet):
    permission_classes = [Perm2]
Run Code Online (Sandbox Code Playgroud)