Декоратор методов в представлении на основе классов не работает

Я использую представление на основе классов и применяю классы разрешений только для метода 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)

Где я делаю неправильно. Есть ли какие-то настройки, чтобы это работало??


person Naresh    schedule 06.02.2016    source источник
comment
внезапно он остановился, не очень описателен... Что происходит? Ошибки? Недействительные результаты?   -  person Sayse    schedule 06.02.2016
comment
@Sayse не знаю ... но мне разрешено публиковать без аутентификации ..   -  person Naresh    schedule 06.02.2016


Ответы (1)


Декораторы 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)
person Alasdair    schedule 06.02.2016
comment
я хочу применить метод POST, а не метод GET... поэтому я использовал декоратор метода - person Naresh; 06.02.2016
comment
Извините, я не заметил этого, когда впервые прочитал ваш вопрос. В этом случае, я думаю, вам нужен класс разрешений IsAuthenticatedOrReadOnly. - person Alasdair; 06.02.2016