Django-基于函数的视图的自定义权限

b_p*_*kes 6 python django django-rest-framework

如何为基于函数的视图编写自定义权限?我正在使用REST框架,并且已经编写了密文加密/解密API。对于每个键(key-detail),我都有一个基于功能的视图,我只想提供给该键的所有者。我知道使用基于类的视图时就足以定义了permission_classes,但是如何为基于函数的视图做到这一点呢?我尝试使用@permission_classes装饰器,但不适用于我的自定义权限,其编写方式如下:

class IsOwner(permissions.BasePermission):
    """
    Custom permission to only allow owners of an object to access it.
    """

    def has_object_permission(self, request, view, obj):
        return obj.owner == request.user
Run Code Online (Sandbox Code Playgroud)

For*_*rge 6

似乎这是一个已知问题,has_object_permission在使用基于函数的视图时不受支持,在此处报告。

如果您想致电has_permission,则应该可以使用permission_classes装饰器(如文档所示)进行呼叫

@api_view('GET')
@permission_classes((IsAuthenticated, ))
def example_view(request, format=None):
    content = {
        'status': 'request was permitted'
    }
    return Response(content)
Run Code Online (Sandbox Code Playgroud)

  • 但它是一个视图函数,没有`self` 这样的东西,所以我不能调用`self.check_object_permissions(request, obj)`。 (4认同)
  • api_view 装饰器现在需要一个字符串列表,而不是一个字符串。因此,使用上述方法可能会导致 AssertionError,如果是这样,请尝试使用 @api_view(['GET']),而不是 @api_view('GET')。 (2认同)