📝 Вопросы на самопроверку: DRF-блок

🎯 Проверка знаний уроков 26–31 К оглавлению урока

⚡ Топ-5 вопросов

  1. Чем отличается aggregate() от annotate()?
  2. Что такое validated_data и когда он становится доступен?
  3. Какой HTTP-статус вернуть при успешном создании объекта?
  4. Чем ModelViewSet отличается от APIView?
  5. Как получить GET-параметр ?author= в DRF-представлении?

Блок А: ORM — агрегация и аннотации

А-1. aggregate vs annotate

Объясните разницу между aggregate() и annotate(). Какой тип значения возвращает каждый метод?

А-2. Функции агрегации

Перечислите пять основных функций агрегации Django ORM. Напишите запрос, который для модели Task вычисляет: общее количество задач, количество задач со статусом 'done' и количество просроченных задач.

А-3. order_by и срезы

Напишите запрос, который возвращает 5 самых дорогих книг, отсортированных по убыванию цены. Как добавить вторичную сортировку по названию?

А-4. Subquery и OuterRef

Для чего используется OuterRef? Напишите подзапрос, аннотирующий каждую книгу минимальной ценой книги того же автора.

А-5. ExpressionWrapper

Зачем нужен ExpressionWrapper? Напишите запрос, аннотирующий каждую книгу скидкой в процентах (поле discount_pct) на основе полей price и discounted_price.

Блок Б: Введение в DRF

Б-1. Зачем DRF

Что такое Django REST Framework? Какие проблемы он решает по сравнению с чистым Django?

Б-2. Установка

Перечислите шаги для подключения DRF к существующему Django-проекту.

Б-3. HTTP-статусы

Какой HTTP-статус следует вернуть в каждом из случаев:

  • Успешное получение списка объектов (GET)
  • Успешное создание объекта (POST)
  • Успешное удаление (DELETE)
  • Ошибка валидации входных данных
  • Объект не найден

Блок В: Сериализаторы

В-1. Serializer vs ModelSerializer

Чем отличается serializers.Serializer от serializers.ModelSerializer? В каких ситуациях предпочтительнее каждый?

В-2. is_valid и validated_data

Что делает метод is_valid()? Почему нельзя обратиться к validated_data до вызова is_valid()?

В-3. read_only и write_only

Для чего используются атрибуты полей read_only=True и write_only=True? Приведите пример использования каждого.

В-4. Кастомная валидация

Напишите кастомный валидатор поля price в сериализаторе BookSerializer, который проверяет, что цена не отрицательная. Как добавить валидацию на уровне нескольких полей одновременно?

В-5. Переопределение create

Когда нужно переопределять методы create() и update() в сериализаторе? Напишите пример create(), который устанавливает текущую дату в поле created_at.

Блок Г: Представления (Views)

Г-1. @api_view vs APIView

Чем Function-Based View с @api_view отличается от Class-Based View с APIView? Когда предпочтительнее каждый подход?

Г-2. Generic views

Назовите три наиболее используемых generic view из DRF и объясните их назначение. Какие атрибуты обязательны для каждого?

Г-3. ModelViewSet + Router

Что такое ModelViewSet? Как подключить его через DefaultRouter? Какие URL генерирует роутер автоматически?

Г-4. request.data и request.query_params

Чем request.data отличается от request.query_params? В каком методе HTTP-запроса каждый из них используется?

Блок Д: query_params

Д-1. Фильтрация

Напишите APIView, принимающий параметры ?author= и ?is_bestseller=true и фильтрующий книги соответственно.

Д-2. Пагинация

Реализуйте ручную пагинацию через ?page= и ?page_size= в APIView. Как защититься от слишком большого page_size?

Ответы: solutions.html