Урок 38. Пагинация и логирование в DRF/Django

📁 Блок: DRF ⏱️ Время изучения: ~60 мин 🎯 Сложность: Средняя
#pagination #pagination_class #PageNumberPagination #LimitOffsetPagination #CursorPagination #logging #LOGGING #django.db.backends

⚡ Кратко: Пагинация и логирование

Урок охватывает два блока: настройку пагинации в DRF через атрибут pagination_class (три встроенных класса) и глобальную конфигурацию логирования Django (словарь LOGGING, handlers, loggers).

  • PageNumberPagination: навигация по номерам страниц (?page=2, ?page_size=5)
  • LimitOffsetPagination: смещение + лимит (?limit=5&offset=10)
  • CursorPagination: зашифрованный курсор — безопасная навигация без «засветки» параметров
  • Глобальная пагинация: DEFAULT_PAGINATION_CLASS + PAGE_SIZE в REST_FRAMEWORK
  • LOGGING: словарь с handlers (StreamHandler, FileHandler) и loggers (django.db.backends)

Топ-3 ошибки: 1) Задать глобальную CursorPagination без кастомного класса — падает, если в модели нет поля created_at. 2) Указать disable_existing_loggers: True — отключатся все Django-логгеры. 3) Не создать директорию logs/ вручную перед стартом — FileHandler упадёт с FileNotFoundError.

📖 О чём этот урок

Урок 38 посвящён двум ключевым аспектам боевого Django-приложения: управлению большими наборами данных через пагинацию и наблюдаемости через логирование.

Первая часть — атрибут pagination_class в DRF: три встроенных класса пагинации, их назначение, параметры и примеры запросов. Вторая часть — глобальная настройка пагинации через REST_FRAMEWORK в settings.py, в том числе кастомные классы для CursorPagination. Третья часть — подключение системы логирования Django: словарь LOGGING, обработчики (консоль, файл), логгер SQL-запросов django.db.backends.

Что изучим

  • Атрибут pagination_class — назначение и механизм
  • PageNumberPagination — навигация по страницам
  • LimitOffsetPagination — смещение и лимит
  • CursorPagination — курсорная (безопасная) пагинация
  • Глобальная настройка через DEFAULT_PAGINATION_CLASS
  • Кастомный класс пагинации в pagination.py
  • Конфигурация LOGGING в settings.py
  • Handlers: StreamHandler (консоль), FileHandler (файл)
  • Logger django.db.backends для SQL-запросов

📚 Что повторить перед изучением

  • ← Урок 37: Практикум 8 — ViewSets, Generic Views, Router
  • DRF Generic Views: ListAPIView (урок 33)
  • REST_FRAMEWORK конфигурация в settings.py (уроки 26, 29)
  • Django settings.py: структура и базовые переменные (урок 13)
  • Python стандартный модуль logging — базовые концепции

🎯 Что изучать дальше

  • → Урок 39: Summary session 7 — повторение DRF-блока
  • Аутентификация в DRF: SessionAuthentication, TokenAuthentication, JWT (урок 40)
  • Permissions: IsAuthenticated, IsAdminUser, кастомные права доступа
  • Расширенное логирование: RotatingFileHandler, TimedRotatingFileHandler, Sentry
  • Мониторинг производительности SQL-запросов через Django Debug Toolbar