Django Academy · Урок

Фильтрация, поиск и разбиение на страницы

Делайте большие ответы API удобными для использования

Урок 4 из 413 шагов

«Фильтрация, поиск и разбиение на страницы» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. ModelViewSet и маршрутизаторы
  2. Разрешения и ограничение частоты запросов
  3. Аутентификация по токенам и JWT
  4. Фильтрация, поиск и разбиение на страницы
← Назад к Django Academy