✅ Решения — Урок 38

← К оглавлению урока

⚡ Ответы

  • Вопрос 1: 1→b, 2→c, 3→a
  • Вопрос 2: a) page_size_query_param
  • Вопрос 3: a) DEFAULT_PAGINATION_CLASS и PAGE_SIZE
  • Вопрос 4: c) FileHandler
  • Вопрос 5: b) DEBUG

Разбор ответов

Вопрос 1: Классы пагинации — ответ

Правильный ответ: 1→b, 2→c, 3→a

  • 1. LimitOffsetPagination → b) Использует параметры limit и offset
  • 2. CursorPagination → c) Использует курсор для стабильной навигации
  • 3. PageNumberPagination → a) Использует номер страницы и размер страницы

Вопрос 2: page_size_query_param — ответ

Правильный ответ: a) page_size_query_param

Именно этот атрибут класса PageNumberPagination позволяет клиентам задавать размер страницы через параметр запроса. Например: ?page_size=10. Без него клиент не может изменить размер страницы — используется только page_size.

class BookPagination(PageNumberPagination):
    page_size = 5
    page_size_query_param = 'page_size'  # разрешает ?page_size=N
    max_page_size = 100

Вопрос 3: Глобальная пагинация — ответ

Правильный ответ: a) DEFAULT_PAGINATION_CLASS и PAGE_SIZE

Для глобальной настройки пагинации в settings.py нужны два ключа внутри REST_FRAMEWORK:

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
    'PAGE_SIZE': 5,
}

DEFAULT_PAGINATION_CLASS — путь к классу, PAGE_SIZE — лимит/размер страницы по умолчанию.

Вопрос 4: FileHandler — ответ

Правильный ответ: c) FileHandler

Полный путь: logging.FileHandler — встроенный класс стандартной библиотеки Python. Пишет логи в указанный файл.

'file': {
    'level': 'DEBUG',
    'class': 'logging.FileHandler',
    'filename': os.path.join(BASE_DIR, 'db.log'),
}

Варианты a) FileLogHandler и b) StreamLogHandler не существуют. Вариант d) StreamHandler — реальный класс, но пишет в консоль, не в файл.

Вопрос 5: Уровень DEBUG — ответ

Правильный ответ: b) DEBUG

Логгер django.db.backends работает только на уровне DEBUG (числовое значение 10). Именно на этом уровне Django выводит тексты SQL-запросов. При уровне INFO или выше SQL-запросы не попадают в лог.

Дополнительное условие: DEBUG = True в settings.py. При DEBUG = False логгер django.db.backends не передаёт SQL-запросы даже при правильных настройках LOGGING.

Вопрос 6 (практический): Глобальная CursorPagination

# myapp/pagination.py
from rest_framework.pagination import CursorPagination

class CustomCursorPagination(CursorPagination):
    page_size = 6
    ordering = 'created_at'
# settings.py
REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'myapp.pagination.CustomCursorPagination',
    'PAGE_SIZE': 6,
}

Почему нужен кастомный класс: стандартный CursorPagination пытается сортировать по полю created, которое может не существовать в вашей модели. Кастомный класс явно задаёт поле ordering, что делает пагинацию надёжной.