Урок 31. Extract-методы, query_params (DRF)
⚡ Кратко: Extract-методы и query_params
Два инструмента урока: функции Extract* из Django ORM для фильтрации по компонентам даты/времени, и request.query_params в DRF APIView для гибкой фильтрации, сортировки и пагинации через URL-параметры.
- Extract* (Django ORM):
ExtractYear,ExtractMonth,ExtractDay,ExtractWeek,ExtractQuarterи другие — фильтрация/аннотация по частям даты - request.query_params: доступ к GET-параметрам из URL (аналог
request.GETв Django) - Фильтрация:
?author=John&pub_year=2023— динамические фильтры через словарь - Сортировка:
?sort_by=price&sort_order=desc— порядок через параметр - Пагинация:
?page=2&page_size=5—PageNumberPagination+APIView
Топ-3 ошибки: 1) Не проверять, передан ли параметр (None как фильтр ломает запрос). 2) Смешивать request.GET и request.query_params в DRF. 3) Передавать строку в order_by() без валидации — SQL-инъекция.
📖 О чём этот урок
Урок 31 охватывает два связанных инструмента Django/DRF. Первая часть — функции извлечения компонентов даты/времени (Extract*) из django.db.models.functions: они позволяют фильтровать, аннотировать и агрегировать данные по году, месяцу, кварталу, дню недели и другим частям дат прямо в ORM-запросах.
Вторая часть — работа с query parameters в APIView. Параметры, передаваемые в URL после ?, доступны через request.query_params в DRF и позволяют реализовать динамическую фильтрацию, сортировку и пагинацию без изменения кода представления — только через URL.
Что изучим
- Функции
ExtractYear,ExtractMonth,ExtractDay,ExtractWeekDay,ExtractHour,ExtractMinute,ExtractSecond,ExtractWeek,ExtractQuarter - Два способа фильтрации по дате: прямая (встроенные lookups
__year,__month) и через аннотацию + функцию Extract* request.query_params— чтение GET-параметров в APIView- Фильтрация данных по нескольким параметрам через словарь
filters - Сортировка через параметры
sort_byиsort_order - Пагинация через
PageNumberPagination+ переопределениеget_page_size
📚 Что повторить перед изучением
- ← Урок 30: Доп. практикум 6 — Agile мини-проект ч.2
- DRF APIView: методы get/post, объект request, Response (уроки 26, 29)
- Django ORM: QuerySet, filter(), annotate(), order_by() (уроки 19, 22)
- Поля дат в Django: DateField, DateTimeField и встроенные lookups
- HTTP GET-запросы и передача параметров в URL
🎯 Что изучать дальше
- → Урок 32: Summary session 6 — итоговое повторение DRF
- django-filter — мощная библиотека для декларативной фильтрации в DRF
- DRF: фильтрация через SearchFilter и OrderingFilter
- Cursor-based пагинация для больших датасетов
- Аутентификация и права доступа в DRF