一尘不染

Django REST框架-每个方法的单独权限

python

我正在使用Django REST Framework编写API,并且想知道在使用基于类的视图时是否可以为每个方法指定权限。

阅读文档,如果您正在编写基于函数的视图,那么仅使用@permission_classes装饰器对要使用权限保护的视图的函数,我认为这样做非常容易。不过,我不明白的方式使用与CBVS时做同样的APIView课,因为那时我指定用满级的权限permission_classes属性,但将被再应用到所有类方法(getpostput
)。

因此,是否可以用CBV编写API视图,并为视图类的每个方法指定不同的权限?


阅读 168

收藏
2021-01-20

共1个答案

一尘不染

权限应用于整个View类,但是您可以在授权决策中考虑请求的各个方面(例如GET或POST之类的方法)。

参见内置IsAuthenticatedOrReadOnly示例:

SAFE_METHODS = ['GET', 'HEAD', 'OPTIONS']

class IsAuthenticatedOrReadOnly(BasePermission):
    """
    The request is authenticated as a user, or is a read-only request.
    """

    def has_permission(self, request, view):
        if (request.method in SAFE_METHODS or
            request.user and
            request.user.is_authenticated()):
            return True
        return False
2021-01-20