Лучше использовать GenericAPIView или базовый APIView при написании представлений на основе классов (CBV) с Django Rest Framework (DRF) - PullRequest
1 голос
/ 10 марта 2019

Я программировал с использованием django в течение последнего года или около того, и большая часть моей работы была написание API для подключения к интерфейсу на основе React. В большинстве моих руководств я вижу людей, использующих GenericAPIViews для основ, но я не нахожу ничего существенного для сложного кода в API. Поэтому, чтобы доставить свой код вовремя, я выбрал более простое решение, которое заключается в использовании APIView, где я использую меньше абстракций, больше контролирую свой код (пишу больше кода) и четко понимаю функции своих модулей кода.

Что меня беспокоит, так это то, что если я выбрал ярлык, решив не изучать, как использовать GenericAPIViews, чтобы я мог использовать его в полную силу. Некоторые проблемы, с которыми я столкнулся при использовании GenericAPIViews или DRF в целом.

  • Пользовательские разрешения (например, я хочу, чтобы пользователь прошел проверку подлинности, а также имел доступ с определенным уровнем разрешений (например, can_do_xyz или has_access_to_abc)
  • Использование доступных для записи сериализаторов, которым может потребоваться пройти через сложные уровни бизнес-логики / приложений
  • Создание записей для нескольких моделей в одной и той же функции класса GenericAPIView.

На данный момент проблемы, с которыми я столкнулся в моем подходе к использованию базового APIView, заключаются в том, что документированная документация, которую мне удалось написать, является мусором.

  • Мне нужно вручную указать поля запроса / формы / пути в документации схемы API (с использованием AutoSchema)
  • Также, если в API есть методы get / post / put / delete с различными полями, каждая из конечных точек API в swagger будет показывать ВСЕ поля, используемые в методах (что понятно, так как я определяю схему для класса и не для отдельных функций). Есть ли способ решить эту проблему?
  • Метод удаления должен использовать только параметр survey_id в качестве параметра, а метод POST / PUT - тело.

1 Ответ

2 голосов
/ 10 марта 2019

Лично я предпочитаю использовать GenericAPIViews и подходящие миксины, более подробный, но у меня больше контроля над добавленным действием REST, и я думаю, что это поможет другим разработчикам, работающим с моими проектами.

Для управления остальной документацией вы можете использовать drf-yasg , который позволяет сообщать сериализатору для каждого метода.

...