我正在使用Django REST Framework编写API,并且想知道在使用基于类的视图时是否可以为每个方法指定权限。
阅读文档,如果您正在编写基于函数的视图,那么仅使用@permission_classes装饰器对要使用权限保护的视图的函数,我认为这样做非常容易。不过,我不明白的方式使用与CBVS时做同样的APIView课,因为那时我指定用满级的权限permission_classes属性,但将被再应用到所有类方法(get,post,put… )。
@permission_classes
APIView
permission_classes
get
post
put
因此,是否可以用CBV编写API视图,并为视图类的每个方法指定不同的权限?
权限应用于整个View类,但是您可以在授权决策中考虑请求的各个方面(例如GET或POST之类的方法)。
参见内置IsAuthenticatedOrReadOnly示例:
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