我想使用装饰器为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的装饰器来实现这一目标。
答案 0 :(得分:2)
ModelViewSet
继承了Mixin
类和GenericAPIView
。方法list
和create
来自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]
注意:我不确定上述代码是否有效