✅ Решения — Урок 29
⚡ Ответы
Блок 1: 1→B, 2→C, 3→C, 4→C, 5→A,B,C, 6→A,B,C
Блок 2: 7→A, 8→B, 9→C, 10→C, 11→B, 12→A,B,C,D, 13→B,C, 14→A,B,C, 15→C
Блок 3: 16→B, 17→B, 18→A,B,C,D
Блок 1: Поля для отношений между моделями
Вопрос 1 — Ответ: B. PrimaryKeyRelatedField
PrimaryKeyRelatedField используется для сериализации/десериализации связанного объекта по его первичному ключу (ID). Это стандартный способ работы с FK в сериализаторах DRF.
Вопрос 2 — Ответ: C. StringRelatedField
StringRelatedField отображает строковое представление связанного объекта — результат метода __str__(). Поле только для чтения.
Вопрос 3 — Ответ: C. SlugRelatedField
SlugRelatedField использует конкретное поле модели (slug) для идентификации связанного объекта. Позволяет читать и записывать по slug-значению вместо ID.
Вопрос 4 — Ответ: C. PrimaryKeyRelatedField
Для Many-to-Many отношений используется
Для Many-to-Many отношений используется
PrimaryKeyRelatedField с параметром many=True:
genres = serializers.PrimaryKeyRelatedField(queryset=Genre.objects.all(), many=True)
D неверно — ManyToManyField — это поле Django ORM, не DRF-сериализатора.
Вопрос 5 — Ответы: A, B, C
Для ForeignKey подходят три поля:
Для ForeignKey подходят три поля:
- A. PrimaryKeyRelatedField — по ID (стандарт)
- B. SlugRelatedField — по slug-полю
- C. StringRelatedField — только чтение, через
__str__()
Вопрос 6 — Ответы: A, B, C
Для Many-to-Many подходят:
Для Many-to-Many подходят:
- A. PrimaryKeyRelatedField с
many=True - B. ManyRelatedField — базовый класс для M2M
- C. SlugRelatedField с
many=True— по slug
Блок 2: Class-Based Views
Вопрос 7 — Ответ: A. APIView
APIView — базовый класс для создания CBV в DRF. Все остальные классы (GenericAPIView, Generic Views, ViewSets) наследуются от него. GenericAPIView — следующий уровень иерархии.
Вопрос 8 — Ответ: B. ModelViewSet
ModelViewSet объединяет ListModelMixin, CreateModelMixin, RetrieveModelMixin, UpdateModelMixin, DestroyModelMixin и GenericAPIView — полный набор CRUD.
Вопрос 9 — Ответ: C. ListCreateAPIView
ListCreateAPIView = ListModelMixin + CreateModelMixin + GenericAPIView. Обрабатывает GET (список) и POST (создание) на одном URL.
Вопрос 10 — Ответ: C. CreateModelMixin
CreateModelMixin добавляет метод create(), который обрабатывает POST-запросы — валидирует и сохраняет новый объект.
Вопрос 11 — Ответ: B. ReadOnlyModelViewSet
ReadOnlyModelViewSet предоставляет только list() и retrieve() — операции GET. Подходит для справочников и данных только для чтения.
Вопрос 12 — Ответы: A, B, C, D
Все четыре миксина используются с GenericAPIView:
Все четыре миксина используются с GenericAPIView:
- CreateModelMixin — POST (создание)
- UpdateModelMixin — PUT/PATCH (обновление)
- DestroyModelMixin — DELETE (удаление)
- ListModelMixin — GET список
Вопрос 13 — Ответы: B, C
Generic Views = классы из
Generic Views = классы из
rest_framework.generics:
- B.
RetrieveAPIView— да - C.
CreateAPIView— да
Вопрос 14 — Ответы: A, B, C
Преимущества CBV перед FBV:
Преимущества CBV перед FBV:
- A. Объектно-ориентированный подход — код в классах, наследование
- B. Инкапсуляция логики — каждый HTTP-метод в своём методе класса
- C. Управление состоянием — атрибуты экземпляра класса
Вопрос 15 — Ответ: C. ListCreateAPIView
ListCreateAPIView обрабатывает и GET (список), и POST (создание) на одном endpoint. ListAPIView (A) — только список. CreateAPIView (B) — только создание.
Блок 3: APIView
Вопрос 16 — Ответ: B. post
Метод
Метод
post(self, request) обрабатывает POST-запросы — используется для создания нового объекта. Возвращает HTTP_201_CREATED при успехе.
Вопрос 17 — Ответ: B. as_view()
ClassName.as_view() — метод, унаследованный от Django View, преобразующий класс в вызываемую функцию представления для регистрации в urls.py:
path('books/', BookListView.as_view(), name='book-list')
Вопрос 18 — Ответы: A, B, C, D
APIView поддерживает все основные HTTP-методы:
APIView поддерживает все основные HTTP-методы:
get()— GET-запросыpost()— POST-запросыput()— PUT-запросы (полное обновление)delete()— DELETE-запросы
patch() (частичное обновление) и head(), options().