✅ Решения — Урок 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, что делает пагинацию надёжной.