Урок 30. Доп. практикум 6: мини-проект «Agile Projects» ч.2

📁 Блок: DRF ⏱️ Время изучения: ~120 мин 🎯 Сложность: Средняя–Высокая
#django #drf #agile #serializers #apiview #generics #fileupload #customeuser #пагинация #мини-проект #практикум

⚡ Кратко: мини-проект Agile Projects — часть 2

Продолжение REST API-платформы «Agile Projects». 6 задач: CRUD проектов с частичным обновлением, задачи с пагинацией и валидацией, файлы с загрузкой по частям, кастомная модель User с AbstractBaseUser. Django 5.x + DRF 3.15+.

  • Задача 1 (CRUD проектов): ProjectDetailSerializer, ProjectDetailAPIView — GET/PUT (partial=True)/DELETE, эндпоинт /api/v1/projects/<pk>/
  • Задача 2 (задачи + пагинация): AllTasksSerializer, CreateTaskSerializer с валидаторами (name ≥ 10, deadline не в прошлом), TasksListAPIView с PageNumberPagination (5 на страницу)
  • Задача 3 (CRUD задач): TaskDetailSerializer, CreateUpdateTaskSerializer.update(), TaskDetailAPIView — GET/PUT/DELETE
  • Задача 4–5 (файлы): утилиты валидации расширений и размера (≤ 2 MB), chunked save, ProjectFileListGenericView и ProjectFileDetailGenericView
  • Задача 6 (кастомный User): AbstractBaseUser + PermissionsMixin, 13 полей, USERNAME_FIELD = "email", пересоздание БД

Топ-3 ошибки: 1) Вложенные методы валидации внутри class Meta — они игнорируются DRF. 2) Опечатка CreateTasSerializer вместо CreateTaskSerializer в коде лекции. 3) Забыть AUTH_USER_MODEL = 'users.User' в settings.py — миграции сломаются.

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

Урок 30 — дополнительный практикум 6, прямое продолжение урока 28. Проект «Agile Projects» развивается: добавляются CRUD-операции для проектов, полноценное API задач с пагинацией и полевой валидацией, загрузка файлов с побитовой записью и кастомная модель пользователя.

Ключевая новизна по сравнению с частью 1:

  • GenericView вместо APIViewListCreateAPIView, RetrieveDestroyAPIView наследуются из rest_framework.generics
  • Пагинация — класс PageNumberPagination подключается к APIView явно
  • Вложенные сериализаторыTaskDetailSerializer включает ProjectShortInfoSerializer
  • Файловый pipeline — валидация расширений → проверка размера → chunked save → сохранение пути в БД
  • Кастомный UserAbstractBaseUser, поле-ключ email, связь FK с Project

Если нужно освежить основы — Урок 29: Основы DRF ч.2 и Урок 28: мини-проект ч.1.

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

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

  • → Урок 31: Extract-методы и query_params
  • DRF: permissions, authentication (TokenAuthentication, JWT)
  • DRF: ViewSet, Router — автоматическая маршрутизация
  • Django: signals — автоматические действия при сохранении модели