Урок 33. Основы Django REST Framework: часть 3
⚡ Кратко: DRF часть 3
Урок охватывает четыре продвинутые возможности Generic Views: настройка идентификации объектов через lookup_field/lookup_url_kwarg, переопределение get_object() для кастомной фильтрации, передача дополнительного контекста сериализатору через get_serializer_context(), и автоматическая фильтрация/поиск/сортировка через filter_backends.
- lookup_field: поле модели для поиска объекта (по умолчанию
pk) - lookup_url_kwarg: параметр URL для получения значения lookup_field
- get_object(): переопределить для кастомной логики поиска/фильтрации
- get_serializer_context(): передать параметры запроса в сериализатор
- filter_backends: список классов фильтрации — DjangoFilterBackend, SearchFilter, OrderingFilter
- filterset_fields / search_fields / ordering_fields: настройка конкретных полей
Топ-3 ошибки: 1) Забыть добавить django_filters в INSTALLED_APPS после pip install django-filter. 2) Не вызвать super().get_serializer_context() — теряются request, view, format. 3) Установить lookup_url_kwarg без совпадающего параметра <str:...> в URL-шаблоне.
📖 О чём этот урок
Урок 33 продолжает изучение Django REST Framework и посвящён тонкой настройке Generic Views. Разбираются четыре механизма, которые делают API гибким и удобным без написания лишнего кода.
Первая часть — атрибуты lookup_field и lookup_url_kwarg, позволяющие идентифицировать объекты по произвольному полю (не только по pk). Вторая — переопределение метода get_object() для добавления кастомной логики: фильтрации запрещённых объектов, мягкого удаления, дополнительных проверок. Третья — метод get_serializer_context(), позволяющий передавать в сериализатор параметры запроса и другие данные. Четвёртая — атрибут filter_backends с тремя бэкендами: фильтрация по полям, текстовый поиск и сортировка.
Что изучим
- lookup_field — идентификация объекта по нестандартному полю
- lookup_url_kwarg — связь параметра URL с полем модели
- get_object() — переопределение для фильтрации и обработки ошибок
- get_serializer_context() — контекст сериализатора и динамические поля
- filter_backends — DjangoFilterBackend, SearchFilter, OrderingFilter
- filterset_fields, search_fields, ordering_fields — настройка полей
- Примеры параметров запроса:
?author=...,?search=...,?ordering=price
📚 Что повторить перед изучением
- ← Урок 32: Summary session 6 — повторение DRF-блока
- DRF Generic Views: ListCreateAPIView, RetrieveUpdateDestroyAPIView (урок 29)
- Сериализаторы ModelSerializer, метод to_representation (урок 26)
- Django ORM: get(), filter(), исключения DoesNotExist (уроки 16, 19)
- HTTP query parameters:
request.query_params
🎯 Что изучать дальше
- → Урок 34: Практикум 7 — применение фильтрации и Generic Views
- Пагинация: pagination_class, PageNumberPagination, LimitOffsetPagination
- Аутентификация в DRF: SessionAuthentication, TokenAuthentication, JWT
- Permissions: IsAuthenticated, IsAdminUser, кастомные права доступа
- Глобальная настройка фильтрации в DEFAULT_FILTER_BACKENDS