Для запроса определяется контролер, и он отвечает за обработку запроса и выдает нужный результат.
.get()
или .post()
, а вместо этого включает действия .list()
и .create()
..as_view()
.ViewSet
дает два главных преимущества перед классом View
.@detail_route
или @list_route
.@detail_route
содержит pk
в своем URL паттерне и предназначается для методов, которые требуют один экземпляр. Декоратор @list_route
предназначен для методов, которые взаимодейстуют со списками объектов.GET
запросы по умолчанию, но также могут принимать другие методы HTTP с помощью методов аргрумента. Например:^users/{pk}/set_password/$
и ^users/{pk}/unset_password/$
ViewSet
наследуется от APIView. Вы можете использовать любой из стандартных атрибутов, такие как permission_classes
, authentication_classes
, чтобы контролировать поведение API в viewset.ViewSet
не реализует действия. Для того чтобы воспользоваться классом ViewSet
нужно переписать класс и расписать действия.GenericViewSet
наследуется от GenericAPIView
и предоставляет стандартный набо методов get_object
, get_queryset
и другие общие механизмы поведения педставления, но при этом не реализует их.GenericViewSet
вам нужно переписать класс и, либо создать миксины требуемых классов, либо явно определить реализацию действий.ModelViewSet
наследуется от GenericAPIView
и реализует различные действия, совмещая функционал различных классов миксинов.ModelViewSet
предоставляет следующие действия .list()
, .retrieve()
, .create()
, .update()
, .partial_update()
, и .destroy()
.ModelViewSet
расширяет GenericAPIView
вам по меньшей мере нужно предоставить по крайней мере queryset и атрибуты serializer_class
. Например:GenericAPIView
. Например, чтобы использовать ViewSet
, который динамически определяет queryset, вы можете сделать следующее:ViewSet
любой связанный маршрутизатор
не сможет автоматически выделить base_name вашей модели, таким образом вам придется указать kwarg для base_name
при регистрации роутера.ReadOnlyModelViewSet
также наследуется от GenericAPIView
. Как и в случае с ModelViewSet
он также реализует различные действия, но в отличие от ModelViewSet
ограничивается лишь функционалом 'только для чтения' .list()
и .retrieve()
.ModelViewSet
, вам как минимум нужно предоставить queryset и атрибуты serializer_class
ModelViewSet
вы можете использовать стандартне атрибуты и замены методов, доступные в GenericAPIView
.ModelViewSet
, или каким-то образом изменяют поведение.GenericViewSet
и создает миксины для требуемых действий: