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

发布于 2021-01-29 15:09:10

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

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

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

关注者
0
被浏览
85
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    权限应用于整个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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看