Содержание курса
Первые шаги
1 урок
1.
Python–старт
↗
Основы REST API и HTTP (общая теория)
2 урока
1.
Теория ключевых аспектов
↗
2.
Есть вопросик...
↗
Первое приложение на FastAPI
9 уроков
1.
Инициализация проекта в VS Code
↗
2.
От def к async def
↗
3.
Техническое задание на сервис
↗
4.
Первый эндпоинт со списком товаров
↗
5.
Аннотации типов для PRODUCTS
↗
6.
Получение товара по ID и обработка 404
↗
7.
Поиск товаров по тексту
↗
8.
Фильтр товаров по категории
↗
9.
Самостоятельная работа: фильтр по диапазону цен
↗
CRUD: создание, обновление и удаление товаров
8 уроков
1.
Создание товара через POST
↗
2.
Ручная валидация полей в POST
↗
3.
Сбор всех ошибок валидации в одном ответе
↗
4.
Пример тела запроса в Swagger
↗
5.
Полная замена товара через PUT
↗
6.
Удаление товара через DELETE
↗
7.
От example к examples в OpenAPI
↗
8.
Подготовка: Pydantic v2 в зависимостях
↗
Pydantic, обработка ошибок и структура проекта
11 уроков
1.
Pydantic-модели ProductBase и Product
↗
2.
response_model и доступ через точку в GET
↗
3.
Field-валидация и ProductCreate в POST
↗
4.
Самостоятельная работа: Pydantic в PUT
↗
5.
Доступ через точку в DELETE
↗
6.
Рефакторинг
↗
7.
Кастомные русские сообщения об ошибках
↗
8.
Локализация ошибки product_id
↗
9.
Рефакторинг: выносим приложение в пакет app
↗
10.
Pydantic-схемы — в app/schemas.py
↗
11.
Обработка ошибок — в app/errors.py
↗
Основы баз данных и SQL (общая теория)
19 уроков
1.
Зачем нужны базы данных
↗
2.
Установка и настройка окружения для работы с SQLite
↗
3.
Основные концепции структуры базы данных
↗
4.
Отношения в базе данных
↗
5.
Что такое SQL и система типов
↗
6.
Создание таблиц
↗
7.
Ограничения SQL
↗
8.
Добавление записей
↗
9.
Самостоятельная работа: наполнение данными
↗
10.
Выборка данных
↗
11.
Фильтрация данных
↗
12.
Оператор обновления данных
↗
13.
Самостоятельная работа на обновление данных
↗
14.
Оператор удаления данных
↗
15.
Самостоятельная работа: создание и наполнение базы данных
↗
16.
Сложные концепции
↗
17.
Самостоятельная работа на сложные запросы
↗
18.
Сложные запросы
↗
19.
Самостоятельная работа на объединение
↗
База данных SQLite и слой репозитория
14 уроков
1.
Подключаем SQLite через SQLAlchemy
↗
2.
Асинхронная настройка SQLAlchemy
↗
3.
Инициализация БД и lifespan FastAPI
↗
4.
Клиенты для работы с БД и .gitignore
↗
5.
Сидирование БД начальными данными
↗
6.
Репозиторий и dependency injection
↗
7.
Получение списка продуктов из БД
↗
8.
Получение по id и функция ensure_found
↗
9.
Поиск с пользовательской SQL-функцией PY_LOWER
↗
10.
Фильтр по категории через PY_LOWER
↗
11.
Фильтр по диапазону цен через BETWEEN и COALESCE
↗
12.
Обновление товара через репозиторий
↗
13.
Удаление через репозиторий и финал перехода
↗
14.
Уникальность имени и IntegrityError → 409 Conflict
↗
Переход на SQLAlchemy ORM
12 уроков
1.
ORM-модель ProductORM на DeclarativeBase
↗
2.
Инициализация схемы через ORM-модель
↗
3.
Seed на ORM с проверкой «уже сидировано»
↗
4.
list_all через select() и from_attributes
↗
5.
get_by_id через session.get
↗
6.
Создание товара через session.add и refresh
↗
7.
Обновление через setattr и dirty-tracking
↗
8.
Унификация возвращаемых типов через model_validate
↗
9.
Удаление через ORM с возвратом сущности
↗
10.
Поиск на SQLAlchemy Core: select, or_, func
↗
11.
Фильтры по категории и цене на ORM-запросах
↗
12.
Подведение итогов: текущее состояние сервиса
↗
Модуль 6. Модульные роутеры и пользователи
7 уроков
1.
APIRouter и модульная регистрация маршрутов
↗
2.
Вынос продуктовых эндпоинтов в отдельный роутер
↗
3.
ORM-модели пользователей и ролей
↗
4.
Сидирование admin-пользователя и привязка товаров
↗
5.
Схемы и каркас репозитория пользователей
↗
6.
Реализация методов UserRepository
↗
7.
Регистрация пользователей через роутер auth
↗
Аутентификация и авторизация: JWT и роли
11 уроков
1.
JWT-токены: теория аутентификации
↗
2.
Создание и проверка JWT через PyJWT
↗
3.
Логин и OAuth2PasswordRequestForm
↗
4.
get_current_user и CurrentUser-зависимость
↗
5.
Первый защищённый эндпоинт: search
↗
6.
Проверка владельца и роли в продуктовых эндпоинтах
↗
7.
Хеширование паролей через bcrypt
↗
8.
Роутер users и эндпоинт /users/me
↗
9.
Смена пароля через PATCH /users/me/password
↗
10.
AdminUser-зависимость и список пользователей
↗
11.
Активация и деактивация пользователей
↗
Аудит действий через event listeners
8 уроков
1.
AuditLog: модель, репозиторий, схема
↗
2.
Аудит-логирование через отдельный сервис
↗
3.
Эндпоинты просмотра аудита
↗
4.
Теория
↗
5.
ORM-listener'ы и ContextVar для actor_id
↗
6.
HTTP middleware для actor_id
↗
7.
Уборка явных вызовов audit.record
↗
8.
Аудит изменений продуктов через ORM events
↗
Переезд на PostgreSQL и Docker
12 уроков
1.
Подготовка к переезду на PostgreSQL: установка Docker
↗
2.
Экспресс-погружение в Docker
↗
3.
docker-compose.yml с PostgreSQL
↗
4.
Переезд на PostgreSQL через asyncpg
↗
5.
Нормализация поиска через lower и replace для Postgres
↗
6.
Dockerfile для приложения
↗
7.
Pydantic Settings и переменные окружения
↗
8.
SECRET_KEY и TTL токена в env-переменных
↗
9.
ADMIN_PASSWORD в переменных окружения
↗
10.
FastAPI в Compose рядом с Postgres
↗
11.
Compose-профили dev и prod
↗
12.
Makefile: алиасы для частых команд
↗
Миграции схемы через Alembic
8 уроков
1.
Миграции схемы БД: зачем нужны
↗
2.
Установка Alembic и структура миграций
↗
3.
env.py: метаданные моделей и URL из Settings
↗
4.
Первая миграция: init schema
↗
5.
Запуск миграций на старте приложения
↗
6.
Поле created_at и автогенерация миграции
↗
7.
Переименование колонки и почему Alembic его «не видит»
↗
8.
Alembic в Dockerfile и команды миграций в Makefile
↗
Тестирование: от юнитов до интеграционных тестов
12 уроков
1.
pytest: первая инфраструктура тестов
↗
2.
Формы assert и измерение покрытия
↗
3.
Первые «живые» тесты — модуль security
↗
4.
А что, если ты тестировщик: анализ граничных значений
↗
5.
FastAPI TestClient: API-тест без поднятия сервера
↗
6.
Async-тесты в pytest и режим asyncio_mode = "auto"
↗
7.
Тестируем Pydantic-схему: фикстуры и валидация
↗
8.
Отдельный тестовый Postgres в docker-compose
↗
9.
conftest.py: тестовый engine, sessionmaker и session
↗
10.
Проверка изоляции тестов между прогонами
↗
11.
AsyncClient и override зависимостей FastAPI
↗
12.
Интеграционный тест GET /products
↗
Версионирование API и генерация тестовых данных
3 урока
1.
Версионирование API через префикс /api/v1
↗
2.
Генератор тестовых продуктов на Faker
↗
3.
Подключаем фабрику к seed_db и упираемся в
↗
Хранилище файлов: S3, MinIO и модель изображений
6 уроков
1.
Хранилище картинок: S3, MinIO и aioboto3
↗
2.
S3-настройки и async-обёртка S3Storage
↗
3.
ensure_bucket: автосоздание S3-бакета при старте
↗
4.
Публичная политика чтения S3-бакета
↗
5.
ProductImageORM: модель картинки и связь 1-к-1
↗
6.
Сидинг placeholder в S3 и в product_image
↗
Пагинация и API v2
5 уроков
1.
Универсальная пагинация: Page[T] и PageParams
↗
2.
v2-поиск по имени и описанию с пагинацией
↗
3.
v2-роутер продуктов и пагинированный list
↗
4.
v2-фильтрация по категории с пагинацией
↗
5.
v2-фильтрация по цене с опциональными границами
↗
Загрузка и управление изображениями товаров
5 уроков
1.
Эндпоинт картинки товара
↗
2.
put_object и delete_object в S3Storage
↗
3.
upsert_image и delete_image в репозитории
↗
4.
POST и DELETE для картинки товара
↗
5.
Проблема: удалённые товары оставляют картинки в S3
↗
Модуль 16. Модуль поддержки пользователей — итоговый проект
18 уроков
1.
Каркас модуля поддержки: пакет app/support
↗
2.
SupportStatus и SenderRole: enum-ы для поддержки
↗
3.
ConversationORM: модель диалога поддержки
↗
4.
ConversationMessageORM
↗
5.
Индексы и миграция для таблиц поддержки
↗
6.
Связь с админом и Pydantic-схемы модуля поддержки
↗
7.
SupportRepository: каркас и методы чтения
↗
8.
SupportRepository: остальные методы репозитория
↗
9.
Пользовательский роутер поддержки и создание обращения
↗
10.
Пагинированный список обращений пользователя
↗
11.
Просмотр обращения и проверка владельца
↗
12.
Отправка сообщения в обращение
↗
13.
Отметка обращения как прочитанного
↗
14.
Админский роутер: список всех обращений
↗
15.
Счётчики обращений для админки
↗
16.
Просмотр любого обращения админом
↗
17.
Ответ админа на обращение
↗
18.
Закрытие обращения: владелец или админ
↗
Публичный API и финальные штрихи
6 уроков
1.
Флаг featured для продуктов
↗
2.
Выборка избранных товаров с добивкой случайными
↗
3.
Публичный endpoint избранных товаров
↗
4.
Категории с количеством товаров (агрегация)
↗
5.
Расширение seed: реальные картинки товаров
↗
6.
CORS: пускаем фронтенд к API
↗
Что дальше
1 урок
1.
Возможно, тут появится продолжение...
↗