在ModelViewset方法中为“列表”,“创建”,“检索”,“更新”的每个方法使用装饰器的不同权限

时间:2019-01-30 10:55:39

标签: django django-rest-framework django-views python-decorators django-permissions

我想使用装饰器为ModelViewset类的不同方法添加不同的权限。

我尝试过:

class abcd(viewsets.ModelViewSet):

    @permission_classes(IsAuthenticated,))
    def list(self, request, format=None):
        try:


    @permission_classes(CustomPermission,))
    def create(self, request, format=None):
        try:

但是它不起作用。 我也尝试使用@method_decorator。那也不起作用。

我知道我们可以通过以下方式进行操作:

def get_permissions(self):
    if self.action == 'create':
        return [IsAuthenticated(), ]        
    return super(abcd, self).get_permissions()

但是我想知道我们是否可以使用Django Rest Framework的装饰器来实现这一目标。

1 个答案:

答案 0 :(得分:2)

ModelViewSet继承了Mixin类和GenericAPIView。方法listcreate来自Mixins,因此用permission_classes修饰是行不通的。相反,您可以尝试覆盖get_permissions中的APIView

def get_permisssions(self):
    if self.request.method == "GET":
        return [IsAuthenticated()]
    elif self.request.method == "POST":
        return [CustomPermission()]
    return [permission() for permission in self.permission_classes]

注意:我不确定上述代码是否有效