Фильтрация, поиск и разбиение на страницы
Делайте большие ответы API удобными для использования
«Фильтрация, поиск и разбиение на страницы» — бесплатный урок Django Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.
Большие ответы — это проблема
Возвращать тысячи строк в одном ответе медленно и неудобно. DRF предоставляет фильтрацию, поиск и разбиение на страницы, чтобы данные оставались удобными для использования.
Почему сначала нужно разбиение на страницы
Разбиение на страницы делит большой список на страницы, поэтому клиенты получают данные частями, а не загружают всё сразу.
Включение разбиения на страницы
Задайте в настройках класс разбиения на страницы и размер страницы по умолчанию — после этого все представления списков начнут автоматически использовать разбиение.
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS':
'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10,
}Структура разбитого на страницы ответа
PageNumberPagination оборачивает результаты в поля count, next и previous со ссылками, поэтому клиенты легко переходят между страницами. 📄
Варианты разбиения на страницы
Выберите подходящий вариант: PageNumberPagination использует номера страниц, а LimitOffsetPagination позволяет клиентам напрямую задавать лимит и смещение.
Теперь — фильтрация
Фильтрация сужает результаты по точным значениям полей — например, позволяет запросить только книги, у которых идентификатор автора равен 5.
Добавление DjangoFilterBackend
Установите django-filter, включите DjangoFilterBackend и перечислите в filterset_fields поля, по которым клиентам разрешено выполнять фильтрацию.
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
filterset_fields = ['author', 'published_year']Фильтры как параметры запроса
Клиенты выполняют фильтрацию через строку запроса URL, поэтому запрос вроде /books/?author=5 возвращает только книги этого автора. 🔍
Поиск и фильтрация
SearchFilter выполняет неточное текстовое сопоставление по нескольким полям, а фильтрация ищет точные значения. Поиск предназначен для произвольных текстовых запросов.
Включение полей поиска
Добавьте SearchFilter и перечислите в search_fields столбцы, по которым нужно выполнять поиск. Затем клиенты передают поисковый термин с параметром search.
from rest_framework.filters import SearchFilter
class BookViewSet(viewsets.ModelViewSet):
filter_backends = [SearchFilter]
search_fields = ['title', 'author__name']Сортировка результатов
Добавьте OrderingFilter, чтобы клиенты могли сортировать результаты с помощью ordering=title или ordering=-price для сортировки по убыванию — всё непосредственно из URL.
Быстрая проверка
Убедитесь, что Вы умеете различать эти инструменты.
Повторение: удобные ответы API
Теперь Вы умеете разбивать списки на страницы с помощью постраничной навигации, сужать их фильтрами, находить текст поиском и сортировать с помощью ordering. Ваш API остаётся быстрым и удобным. 🎉
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «Фильтрация, поиск и разбиение на страницы» бесплатный?
Да — полный текст урока «Фильтрация, поиск и разбиение на страницы» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.
Чему я научусь в уроке «Фильтрация, поиск и разбиение на страницы»?
Делайте большие ответы API удобными для использования Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Django Academy?
Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Фильтрация, поиск и разбиение на страницы»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Django Academy?
Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- ModelViewSet и маршрутизаторы
- Разрешения и ограничение частоты запросов
- Аутентификация по токенам и JWT
- Фильтрация, поиск и разбиение на страницы