Урок 30. Доп. практикум 6: мини-проект «Agile Projects» ч.2
⚡ Кратко: мини-проект 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 вместо APIView —
ListCreateAPIView,RetrieveDestroyAPIViewнаследуются изrest_framework.generics - Пагинация — класс
PageNumberPaginationподключается кAPIViewявно - Вложенные сериализаторы —
TaskDetailSerializerвключаетProjectShortInfoSerializer - Файловый pipeline — валидация расширений → проверка размера → chunked save → сохранение пути в БД
- Кастомный User —
AbstractBaseUser, поле-ключemail, связь FK сProject
Если нужно освежить основы — Урок 29: Основы DRF ч.2 и Урок 28: мини-проект ч.1.
📚 Что повторить перед изучением
- ← Урок 28: мини-проект Agile Projects ч.1
- ← Урок 29: Основы DRF — часть 2
- DRF: APIView, ModelSerializer, сериализаторы с связями
- Django: модели с FK/M2M, AbstractBaseUser, миграции
- Python: typing (Any, list), pathlib, os, datetime
- Git: ветки, коммиты, pull request
🎯 Что изучать дальше
- → Урок 31: Extract-методы и query_params
- DRF: permissions, authentication (TokenAuthentication, JWT)
- DRF: ViewSet, Router — автоматическая маршрутизация
- Django: signals — автоматические действия при сохранении модели