我只使用方法装饰器在POST方法上使用基于类的视图和应用权限类。直到昨天它工作,但突然间它停止了。我无法找到问题。
class OfferCreateListView(ListCreateAPIView):
serializer_class = OfferSerializer
queryset = Offers.objects.filter(user__isnull=True)
@method_decorator(permission_classes((IsAuthenticated,)))
@method_decorator(authentication_classes((BasicAuthentication, SessionAuthentication, TokenAuthentication,)))
def post(self, request, *args, **kwargs):
return super(OfferCreateListView, self).post(request, *args, **kwargs)
我做错了。是否有任何设置可以使用?
答案 0 :(得分:2)
permission_classes
和authentication_classes
装饰器专为基于功能的视图而设计。我没有完全遵循其余的框架代码,但我很惊讶它一直工作到昨天 - 我不是装饰器打算用于基于类的视图。
相反,在类上设置属性。由于您只希望将权限类应用于帖子请求,因此听起来像是您想要IsAuthenticatedOrReadOnly
。
class OfferCreateListView(ListCreateAPIView):
permission_classes = (IsAuthenticatedOrReadOnly,)
authentication_classes = (BasicAuthentication, SessionAuthentication, TokenAuthentication,)
serializer_class = OfferSerializer
queryset = Offers.objects.filter(user__isnull=True)