Урок 35. Доп. практикум 7: мини-проект «Agile Projects» ч.3
⚡ Кратко: мини-проект Agile Projects — часть 3
Завершение REST API-платформы «Agile Projects». 7 задач: расширение API файлов (список + детали + скачивание), кастомная модель User, регистрация с валидацией пароля, назначение разработчика на задачу, скачивание файлов через FileResponse. Django 5.x + DRF 3.15+.
- Задача 1 (список файлов):
get_serializer_class,get_querysetс фильтром по имени проекта, методlistс 204 при пустом результате - Задача 2 (детали + удаление файла):
ProjectFileDetailSerializer,ProjectFileDetailGenericView— GET/DELETE, физическое удаление черезdelete_file() - Задача 3 (кастомный User):
AbstractBaseUser+PermissionsMixin, 14 полей,USERNAME_FIELD = "email",AUTH_USER_MODEL - Задача 4 (список пользователей):
UserListSerializer,UserListGenericViewс фильтром по имени проекта - Задача 5 (регистрация):
RegisterUserSerializerс regex-валидацией +validate_password,RegisterUserGenericView - Задача 6 (assignee):
SlugRelatedField(slug_field='email')вCreateUpdateTaskSerializer - Задача 7 (скачивание):
DownloadProjectFileViewсFileResponse, Content-Disposition attachment
Топ-3 ошибки: 1) Не добавить AUTH_USER_MODEL до первой миграции — придётся пересоздавать БД. 2) re_password не убирать из validated_data перед созданием — ошибка unexpected field. 3) Порядок URL-паттернов — files/download/<pk>/ должен стоять выше files/<pk>/.
📖 О чём этот урок
Урок 35 — дополнительный практикум 7, заключительная итерация проекта «Agile Projects». Добавляем всё необходимое для работы с пользователями и файлами: расширенный API управления файлами, полноценную кастомную систему пользователей (регистрация, список, назначение на задачи) и скачивание файлов.
Ключевые концепции этого урока:
- Generic Views — тонкая настройка:
get_serializer_classпозволяет возвращать разный сериализатор для GET и POST в одном view-классе - Физическое удаление файлов:
os.remove(os.path.realpath(path))— удаление из файловой системы, а не только из БД - AbstractBaseUser: полная замена стандартного пользователя Django с произвольным полем-ключом
- Regex-валидация в сериализаторах: модуль
reдля проверки имён и логинов - FileResponse: стриминг файла из Django с правильными заголовками для скачивания
- SlugRelatedField: связь по человекочитаемому полю (email) вместо id
Предыдущие части: Урок 28: ч.1 и Урок 30: ч.2.
📚 Что повторить перед изучением
- ← Урок 34: Практикум 7: Сериализаторы DRF
- ← Урок 30: мини-проект Agile Projects ч.2
- DRF: GenericAPIView, ListCreateAPIView, RetrieveDestroyAPIView, SlugRelatedField
- Django: AbstractBaseUser, PermissionsMixin, AUTH_USER_MODEL, FileResponse
- Python: os.remove, re (regex), validate_password
- Git: feature-ветки, pull request
🎯 Что изучать дальше
- → Урок 36: Основы DRF — часть 4
- DRF: Authentication (TokenAuth, JWT), Permissions
- DRF: ViewSet + Router — автоматическая маршрутизация
- Django: signals — автоматические триггеры при сохранении модели
- Django: кастомные валидаторы пароля