基于类的视图中的方法装饰器不起作用

时间:2016-02-06 09:55:29

标签: python django django-rest-framework decorator django-class-based-views

我只使用方法装饰器在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)

我做错了。是否有任何设置可以使用?

1 个答案:

答案 0 :(得分:2)

permission_classesauthentication_classes装饰器专为基于功能的视图而设计。我没有完全遵循其余的框架代码,但我很惊讶它一直工作到昨天 - 我不是装饰器打算用于基于类的视图。

相反,在类上设置属性。由于您只希望将权限类应用于帖子请求,因此听起来像是您想要IsAuthenticatedOrReadOnly

class OfferCreateListView(ListCreateAPIView):
    permission_classes = (IsAuthenticatedOrReadOnly,)
    authentication_classes = (BasicAuthentication, SessionAuthentication, TokenAuthentication,)
    serializer_class = OfferSerializer
    queryset = Offers.objects.filter(user__isnull=True)