Что такое Django REST Framework (DRF)
Что проверяют
Работали ли вы с DRF дальше туториала: понимаете ли, из каких слоёв он состоит и где в нём прячутся проблемы производительности и безопасности. Следом обычно спрашивают про N+1 во вложенных сериализаторах или про то, чем DRF отличается от FastAPI.
Как отвечать
DRF это библиотека поверх Django для построения API. Модели, ORM и миграции остаются от Django, DRF добавляет слой обработки запросов и ответов:
- сериализаторы:
SerializerиModelSerializerпревращают объекты в данные для JSON и валидируют входящие. Цепочкаis_valid(),validated_data,save(), который вызываетcreate()илиupdate(). Своя проверка пишется вvalidate_<поле>иvalidate; - представления: от
APIViewчерез generic-классы вродеListCreateAPIViewдоModelViewSet, где CRUD собирается из миксинов; - роутеры:
DefaultRouterсам генерирует URL для вьюсетов; - аутентификация: из коробки сессии, Basic и
TokenAuthentication. JWT подключают отдельным пакетомdjangorestframework-simplejwt; - права:
permission_classesна уровне вьюхи иhas_object_permissionдля конкретного объекта; - throttling, пагинация, фильтры: настраиваются в словаре
REST_FRAMEWORKв settings, фильтрацию обычно берут изdjango-filter; - документация: встроенная генерация схемы ограничена, на практике OpenAPI и Swagger UI делают через
drf-spectacular.
Честно назовите ограничения. Нативной поддержки асинхронных вьюх в DRF нет, и под нагрузку с большим числом медленных внешних вызовов берут FastAPI или Django Ninja.
Где спотыкаются
Не знают значений по умолчанию. DEFAULT_PERMISSION_CLASSES по умолчанию AllowAny, и забытая настройка открывает API всем, а пагинации нет вовсе, пока её не включили.
Вкладывают сериализатор в сериализатор и получают по запросу на каждую строку. Лечится select_related и prefetch_related в get_queryset, проверяется через django-debug-toolbar или assertNumQueries в тестах.
Кладут бизнес-логику во вьюхи или в save() сериализатора. Такой код потом не переиспользовать из задачи Celery или management-команды, лучше вынести его в сервисный слой.