🏗️ Капстоун C — Task Manager / Project Tracker REST API
⚡ Кратко: что строим
Task Manager API — полноценный REST API управления проектами и задачами с командами, JWT-аутентификацией и уведомлениями. Флагманский сквозной проект, связывающий весь курс.
- Стек: Django 5.x · DRF 3.15+ · djangorestframework-simplejwt 5.x · drf-spectacular
- Сущности: User (кастомная), Project, Task, Comment; полные CRUD-операции
- Закрывает: callout-verify из уроков 26, 29, 31, 33, 36, 38, 40–45 (DRF, JWT, permissions, сигналы, пагинация, логирование)
Время прохождения: ~10–12 часов (12 этапов по 45–60 минут каждый).
📖 О проекте
Task Manager / Project Tracker REST API — backend-сервис для управления проектами и задачами в командной работе. Пользователи создают проекты, добавляют в них участников, заводят задачи, назначают исполнителей и оставляют комментарии. Типичная база для Trello-подобных систем, корпоративных трекеров и agile-инструментов.
Это флагманская серия — она связывает весь курс Python Advanced в один реальный проект. Здесь вы увидите, как DRF, JWT, permissions, сигналы и документация Swagger работают вместе в production-grade приложении.
Что закрывает этот капстоун
В ходе основного курса ряд тем был помечен callout-verify — сложные места,
требующие практики в реальном проекте. Данная серия закрывает:
- Урок 26, Урок 29, Урок 33, Урок 36 — DRF: сериализаторы, generic views, ViewSets, soft-delete, транзакции (этапы 05, 06, 11)
- Урок 33, Урок 38 — query_params, фильтрация, пагинация, логирование (этапы 07, 11)
- Урок 40, Урок 42, Урок 44 — аутентификация, permissions, JWT (этапы 08, 09)
-
Урок 42,
Урок 45 —
сигналы
post_save+ email-уведомления (этап 10)
Технологический стек
🗄️ Схема данных
Проект строится вокруг четырёх сущностей:
| Модель | Приложение | Ключевые поля | Связи |
|---|---|---|---|
User |
apps/users/ |
email (USERNAME_FIELD), username, bio, avatar |
Базовый AbstractUser; используется во всех FK/M2M |
Project |
apps/projects/ |
name, description, owner (FK User), created_at, is_active |
FK → User (owner), M2M → User (members через members) |
Task |
apps/tasks/ |
title, description, project (FK), assignee (FK User), status, priority, due_date, is_deleted |
FK → Project, FK → User (assignee) |
Comment |
apps/tasks/ |
task (FK), author (FK User), text, created_at |
FK → Task, FK → User (author) |
📋 Этапы серии
Каждый этап продолжает проект предыдущего. Проходить строго по порядку.
Структура и настройка
Создаём venv, устанавливаем Django 5 + DRF, описываем структуру apps/, настраиваем settings.py через django-environ, добавляем rest_framework в INSTALLED_APPS.
БД и кастомная модель User
Создаём apps/users/, пишем кастомный User на базе AbstractUser, устанавливаем AUTH_USER_MODEL ДО первой миграции. Запускаем migrate, создаём суперпользователя.
Модели Project, Task, Comment
Создаём apps/projects/ и apps/tasks/, описываем все модели с FK/M2M, Meta, TextChoices, миграции.
Админка: ModelAdmin и inline
Регистрируем все модели в Admin, настраиваем list_display, search_fields, list_filter. Добавляем TaskInline в ProjectAdmin. Пишем кастомный action.
DRF Сериализаторы
Пишем ModelSerializer для всех моделей. Вложенные сериализаторы, validate_ / validate(), read_only_fields, сериализатор регистрации User.
ViewSets, Router и CRUD
Реализуем ModelViewSet для Project, Task, Comment. Подключаем DefaultRouter, регистрируем маршруты. Базовый CRUD проверяется через curl.
Фильтрация, сортировка, пагинация
django-filter: фильтрация задач по статусу, проекту, исполнителю. OrderingFilter. PageNumberPagination + LimitOffsetPagination.
JWT-аутентификация
SimpleJWT: регистрация, логин (получение access/refresh), обновление токена. Настройка httpOnly-куки (best practice). Защищаем эндпоинты.
Object-level permissions
Кастомные permissions: IsProjectOwner, IsProjectMemberOrOwner, IsTaskAssigneeOrOwner. Object-level проверки в ViewSet.
Сигналы и email-уведомления
Сигнал post_save на Task → email исполнителю при назначении. Django console email backend для разработки. Подключение через apps.py.
Логирование, ошибки, soft-delete
Python logging в Django, кастомный exception handler DRF. Soft-delete для Task через is_deleted + кастомный QuerySet. Транзакции atomic().
Swagger и финал
drf-spectacular: настройка, @extend_schema, Swagger UI. Базовые тесты через APITestCase. Финальный Postman-прогон. Деплой-заметки.
📚 Что понадобится
- Уроки 13–16 — Django ORM, модели, миграции
- Уроки 19, 22, 24 — Django Admin, queryset оптимизация
- Уроки 26, 29, 33, 36 — DRF основы: сериализаторы, generic views, ViewSets
- Уроки 40–45 — Auth: сессии, permissions, JWT, сигналы
- Python 3.10+, pip, venv установлены
- Git (базовые команды)
- Postman или curl для тестирования API
🚀 Как работать с серией
- Проходите этапы строго по порядку — каждый продолжает код предыдущего.
- Перед каждым этапом: прочитайте секцию «Цель» и «Затрагиваемые файлы».
- Над каждым блоком кода указан путь к файлу — не гадайте, куда писать.
- После каждого этапа: выполните шаги из раздела «Проверка» (curl / Postman).
- Все 12 этапов доступны. Проходите строго по порядку.
apps/:
Весь код бизнес-логики живёт в папке apps/. Каждое приложение —
отдельная директория: apps/users/, apps/projects/,
apps/tasks/. Настройки — в config/. Это распространённое
соглашение в Django-сообществе, аналогичное паттерну из Капстоуна B.