Разница между ViewSet, ModelViewSet и APIView - PullRequest
0 голосов
/ 07 февраля 2020

Каковы преимущества ViewSet , ModelViewSet и APIView . В документах django -rest-framework не ясно, в нем не сказано, когда следует использовать ViewSet, ModelViewSet и APIView. Я хочу реализовать API, который будет иметь бизнес-логику c и отличную бизнес-логику c с обработкой данных. Что следует использовать в этом случае? Я много исследовал и сумел понять немного о маршрутизаторах и urlpatterns , но я не понял, какой из них о представлениях.

1 Ответ

0 голосов
/ 08 февраля 2020

Подводя итог: с одной стороны у вас есть APIView, который является наиболее обобщенным c из трех, но также вы должны выполнять почти все бизнес-логики c «вручную». У вас есть методы класса, отображающие методы http (get, post, ...) и некоторые атрибуты класса для настройки таких вещей, как аутентификация, рендеринг и т. Д. c.

Часто вы будете разрабатывать конечные точки для взаимодействия с ресурсами (сущностями, такими как «Пользователи», «Продукты», «Заказы» и т. д. c.) с помощью операций CRUD, и для этого и используется ViewSet: у них больше семантических c методов класса, таких как list, create, retrieve ... что маршрутизатор может затем автоматически сопоставить URL-адреса и методы http за счет принятия некоторых предположений: например, retrieve предполагает, что вызов http равен GET /you_resource/<pk>. Он более жесткий, чем универсальный c APIView, но отнимает у вас некоторую шаблонную / ручную конфигурацию, которую вам придется повторять снова и снова в большинстве случаев.

Еще один шаг - ModelViewSet, который является расширением ViewSet, когда вы работаете с Django моделями. Просто указав serializer_class и queryset, у вас есть все операции CRUD ViewSet, готовые к go. Очевидно, что вы также можете добавить свои собственные методы к ViewSet или настроить поведение методов по умолчанию.

По моему опыту, использование ViewSets окупается. Код выглядит чище, и вы избегаете шаблонного кода. Предположения, которые он делает, являются разумными, и я бы даже сказал, что вы, вероятно, получите более чистый дизайн API, следуя им.

...