Содержание курса
1. Первые шаги
1 урок
11
8
4м
0
Закрытый
1.1
Python–старт
↗
11
8
4м 28с
0
2. Основы REST API и HTTP (общая теория)
2 урока
388
304
36м
37
Закрытый
2.1
Теория ключевых аспектов
↗
204
157
30м 21с
26
Закрытый
2.2
Есть вопросик...
↗
184
147
5м 23с
11
3. Первое приложение на FastAPI
9 уроков
50
32
65м
0
Открытый
3.1
Инициализация проекта в VS Code
↗
9
4
36м 53с
0
Открытый
3.2
От def к async def
↗
8
4
2м 58с
0
Закрытый
3.3
Техническое задание на сервис
↗
4
4
2м 54с
0
Открытый
3.4
Первый эндпоинт со списком товаров
↗
4
4
5м 33с
0
Открытый
3.5
Аннотации типов для PRODUCTS
↗
5
3
3м 38с
0
Открытый
3.6
Получение товара по ID и обработка 404
↗
5
4
4м 39с
0
Открытый
3.7
Поиск товаров по тексту
↗
5
3
5м 16с
0
Открытый
3.8
Фильтр товаров по категории
↗
4
3
3м 58с
0
Открытый
3.9
Самостоятельная работа: фильтр по диапазону цен
↗
6
3
6м 8с
0
4. CRUD: создание, обновление и удаление товаров
8 уроков
4
3
41м
0
Закрытый
4.1
Создание товара через POST
↗
2
1
10м 12с
0
Закрытый
4.2
Ручная валидация полей в POST
↗
1
1
5м 31с
0
Закрытый
4.3
Сбор всех ошибок валидации в одном ответе
↗
1
1
5м 15с
0
Закрытый
4.4
Пример тела запроса в Swagger
↗
0
0
2м 32с
0
Закрытый
4.5
Полная замена товара через PUT
↗
0
0
7м 6с
0
Закрытый
4.6
Удаление товара через DELETE
↗
0
0
4м 13с
0
Закрытый
4.7
От example к examples в OpenAPI
↗
0
0
5м 7с
0
Закрытый
4.8
Подготовка: Pydantic v2 в зависимостях
↗
0
0
3м 47с
0
5. Pydantic, обработка ошибок и структура проекта
11 уроков
1
0
62м
0
Закрытый
5.1
Pydantic-модели ProductBase и Product
↗
0
0
4м 40с
0
Закрытый
5.2
response_model и доступ через точку в GET
↗
0
0
4м 41с
0
Закрытый
5.3
Field-валидация и ProductCreate в POST
↗
0
0
7м 3с
0
Закрытый
5.4
Самостоятельная работа: Pydantic в PUT
↗
1
0
1м 0с
0
Закрытый
5.5
Доступ через точку в DELETE
↗
0
0
1м 41с
0
Закрытый
5.6
Рефакторинг
↗
0
0
21м 56с
0
Закрытый
5.7
Кастомные русские сообщения об ошибках
↗
0
0
7м 58с
0
Закрытый
5.8
Локализация ошибки product_id
↗
0
0
1м 50с
0
Закрытый
5.9
Рефакторинг: выносим приложение в пакет app
↗
0
0
9м 1с
0
Закрытый
5.10
Pydantic-схемы — в app/schemas.py
↗
0
0
3м 1с
0
Закрытый
5.11
Обработка ошибок — в app/errors.py
↗
0
0
5м 2с
0
6. Основы баз данных и SQL (общая теория)
19 уроков
2 102
1 925
159м
231
Закрытый
6.1
Зачем нужны базы данных
↗
139
101
12м 9с
16
Закрытый
6.2
Установка и настройка окружения для работы с SQLite
↗
127
112
16м 35с
12
Закрытый
6.3
Основные концепции структуры базы данных
↗
123
111
9м 35с
12
Закрытый
6.4
Отношения в базе данных
↗
121
109
5м 11с
14
Закрытый
6.5
Что такое SQL и система типов
↗
114
105
9м 31с
12
Закрытый
6.6
Создание таблиц
↗
115
105
6м 59с
12
Закрытый
6.7
Ограничения SQL
↗
110
101
14м 59с
14
Закрытый
6.8
Добавление записей
↗
105
100
8м 48с
14
Закрытый
6.9
Самостоятельная работа: наполнение данными
↗
105
99
4м 19с
12
Закрытый
6.10
Выборка данных
↗
105
99
10м 15с
11
Закрытый
6.11
Фильтрация данных
↗
104
99
23м 43с
13
Закрытый
6.12
Оператор обновления данных
↗
103
99
4м 39с
10
Закрытый
6.13
Самостоятельная работа на обновление данных
↗
104
96
6м 44с
12
Закрытый
6.14
Оператор удаления данных
↗
103
98
5м 27с
12
Закрытый
6.15
Самостоятельная работа: создание и наполнение базы данных
↗
102
96
2м 16с
8
Закрытый
6.16
Сложные концепции
↗
108
99
15м 38с
13
Закрытый
6.17
Самостоятельная работа на сложные запросы
↗
102
93
3м 58с
11
Закрытый
6.18
Сложные запросы
↗
107
107
3м 2с
11
Закрытый
6.19
Самостоятельная работа на объединение
↗
105
96
6м 48с
12
7. База данных SQLite и слой репозитория
14 уроков
2
1
67м
0
Закрытый
7.1
Подключаем SQLite через SQLAlchemy
↗
2
1
6м 29с
0
Закрытый
7.2
Асинхронная настройка SQLAlchemy
↗
0
0
5м 43с
0
Закрытый
7.3
Инициализация БД и lifespan FastAPI
↗
0
0
3м 12с
0
Закрытый
7.4
Клиенты для работы с БД и .gitignore
↗
0
0
4м 39с
0
Закрытый
7.5
Сидирование БД начальными данными
↗
0
0
7м 53с
0
Закрытый
7.6
Репозиторий и dependency injection
↗
0
0
8м 13с
0
Закрытый
7.7
Получение списка продуктов из БД
↗
0
0
3м 33с
0
Закрытый
7.8
Получение по id и функция ensure_found
↗
0
0
5м 54с
0
Закрытый
7.9
Поиск с пользовательской SQL-функцией PY_LOWER
↗
0
0
10м 58с
0
Закрытый
7.10
Фильтр по категории через PY_LOWER
↗
0
0
2м 4с
0
Закрытый
7.11
Фильтр по диапазону цен через BETWEEN и COALESCE
↗
0
0
4м 57с
0
Закрытый
7.12
Обновление товара через репозиторий
↗
0
0
4м 52с
0
Закрытый
7.13
Удаление через репозиторий и финал перехода
↗
0
0
3м 48с
0
Закрытый
7.14
Уникальность имени и IntegrityError → 409 Conflict
↗
0
0
4м 45с
0
8. Переход на SQLAlchemy ORM
12 уроков
0
0
37м
0
Закрытый
8.1
ORM-модель ProductORM на DeclarativeBase
↗
0
0
4м 5с
0
Закрытый
8.2
Инициализация схемы через ORM-модель
↗
0
0
2м 7с
0
Закрытый
8.3
Seed на ORM с проверкой «уже сидировано»
↗
0
0
3м 14с
0
Закрытый
8.4
list_all через select() и from_attributes
↗
0
0
3м 20с
0
Закрытый
8.5
get_by_id через session.get
↗
0
0
1м 29с
0
Закрытый
8.6
Создание товара через session.add и refresh
↗
0
0
2м 17с
0
Закрытый
8.7
Обновление через setattr и dirty-tracking
↗
0
0
4м 15с
0
Закрытый
8.8
Унификация возвращаемых типов через model_validate
↗
0
0
6м 52с
0
Закрытый
8.9
Удаление через ORM с возвратом сущности
↗
0
0
3м 36с
0
Закрытый
8.10
Поиск на SQLAlchemy Core: select, or_, func
↗
0
0
3м 37с
0
Закрытый
8.11
Фильтры по категории и цене на ORM-запросах
↗
0
0
4м 52с
0
Закрытый
8.12
Подведение итогов: текущее состояние сервиса
↗
0
0
1м 16с
0
9. Модуль 6. Модульные роутеры и пользователи
7 уроков
0
0
36м
0
Закрытый
9.1
APIRouter и модульная регистрация маршрутов
↗
0
0
8м 42с
0
Закрытый
9.2
Вынос продуктовых эндпоинтов в отдельный роутер
↗
0
0
6м 31с
0
Закрытый
9.3
ORM-модели пользователей и ролей
↗
0
0
5м 52с
0
Закрытый
9.4
Сидирование admin-пользователя и привязка товаров
↗
0
0
4м 29с
0
Закрытый
9.5
Схемы и каркас репозитория пользователей
↗
0
0
6м 41с
0
Закрытый
9.6
Реализация методов UserRepository
↗
0
0
2м 30с
0
Закрытый
9.7
Регистрация пользователей через роутер auth
↗
0
0
6м 38с
0
10. Аутентификация и авторизация: JWT и роли
11 уроков
3
0
88м
0
Закрытый
10.1
JWT-токены: теория аутентификации
↗
1
0
8м 4с
0
Закрытый
10.2
Создание и проверка JWT через PyJWT
↗
1
0
7м 16с
0
Закрытый
10.3
Логин и OAuth2PasswordRequestForm
↗
0
0
11м 46с
0
Закрытый
10.4
get_current_user и CurrentUser-зависимость
↗
0
0
4м 44с
0
Закрытый
10.5
Первый защищённый эндпоинт: search
↗
0
0
4м 21с
0
Закрытый
10.6
Проверка владельца и роли в продуктовых эндпоинтах
↗
1
0
14м 43с
0
Закрытый
10.7
Хеширование паролей через bcrypt
↗
0
0
12м 42с
0
Закрытый
10.8
Роутер users и эндпоинт /users/me
↗
0
0
4м 6с
0
Закрытый
10.9
Смена пароля через PATCH /users/me/password
↗
0
0
9м 24с
0
Закрытый
10.10
AdminUser-зависимость и список пользователей
↗
0
0
6м 17с
0
Закрытый
10.11
Активация и деактивация пользователей
↗
0
0
9м 54с
0
11. Аудит действий через event listeners
8 уроков
3
0
36м
0
Закрытый
11.1
AuditLog: модель, репозиторий, схема
↗
0
0
7м 43с
0
Закрытый
11.2
Аудит-логирование через отдельный сервис
↗
0
0
7м 6с
0
Закрытый
11.3
Эндпоинты просмотра аудита
↗
0
0
5м 27с
0
Закрытый
11.4
Теория
↗
1
0
3м 40с
0
Закрытый
11.5
ORM-listener'ы и ContextVar для actor_id
↗
1
0
5м 38с
0
Закрытый
11.6
HTTP middleware для actor_id
↗
0
0
4м 3с
0
Закрытый
11.7
Уборка явных вызовов audit.record
↗
0
0
4м 42с
0
Закрытый
11.8
Аудит изменений продуктов через ORM events
↗
1
0
1м 28с
0
12. Переезд на PostgreSQL и Docker
12 уроков
8
0
95м
0
Закрытый
12.1
Подготовка к переезду на PostgreSQL: установка Docker
↗
0
0
13м 43с
0
Закрытый
12.2
Экспресс-погружение в Docker
↗
0
0
14м 9с
0
Закрытый
12.3
docker-compose.yml с PostgreSQL
↗
1
0
9м 55с
0
Закрытый
12.4
Переезд на PostgreSQL через asyncpg
↗
0
0
5м 16с
0
Закрытый
12.5
Нормализация поиска через lower и replace для Postgres
↗
0
0
8м 42с
0
Закрытый
12.6
Dockerfile для приложения
↗
1
0
9м 11с
0
Закрытый
12.7
Pydantic Settings и переменные окружения
↗
1
0
4м 8с
0
Закрытый
12.8
SECRET_KEY и TTL токена в env-переменных
↗
1
0
3м 33с
0
Закрытый
12.9
ADMIN_PASSWORD в переменных окружения
↗
1
0
1м 57с
0
Закрытый
12.10
FastAPI в Compose рядом с Postgres
↗
1
0
16м 19с
0
Закрытый
12.11
Compose-профили dev и prod
↗
1
0
7м 21с
0
Закрытый
12.12
Makefile: алиасы для частых команд
↗
1
0
5м 20с
0
13. Миграции схемы через Alembic
8 уроков
0
0
34м
0
Закрытый
13.1
Миграции схемы БД: зачем нужны
↗
0
0
8м 41с
0
Закрытый
13.2
Установка Alembic и структура миграций
↗
0
0
2м 24с
0
Закрытый
13.3
env.py: метаданные моделей и URL из Settings
↗
0
0
3м 43с
0
Закрытый
13.4
Первая миграция: init schema
↗
0
0
3м 3с
0
Закрытый
13.5
Запуск миграций на старте приложения
↗
0
0
10м 59с
0
Закрытый
13.6
Поле created_at и автогенерация миграции
↗
0
0
4м 49с
0
Закрытый
13.7
Переименование колонки и почему Alembic его «не видит»
↗
0
0
3м 53с
0
Закрытый
13.8
Alembic в Dockerfile и команды миграций в Makefile
↗
0
0
1м 26с
0
14. Тестирование: от юнитов до интеграционных тестов
12 уроков
3
0
57м
0
Закрытый
14.1
pytest: первая инфраструктура тестов
↗
0
0
12м 13с
0
Закрытый
14.2
Формы assert и измерение покрытия
↗
0
0
6м 4с
0
Закрытый
14.3
Первые «живые» тесты — модуль security
↗
0
0
6м 35с
0
Закрытый
14.4
А что, если ты тестировщик: анализ граничных значений
↗
1
0
8м 37с
0
Закрытый
14.5
FastAPI TestClient: API-тест без поднятия сервера
↗
0
0
2м 14с
0
Закрытый
14.6
Async-тесты в pytest и режим asyncio_mode = "auto"
↗
0
0
3м 55с
0
Закрытый
14.7
Тестируем Pydantic-схему: фикстуры и валидация
↗
0
0
3м 26с
0
Закрытый
14.8
Отдельный тестовый Postgres в docker-compose
↗
1
0
3м 0с
0
Закрытый
14.9
conftest.py: тестовый engine, sessionmaker и session
↗
0
0
3м 16с
0
Закрытый
14.10
Проверка изоляции тестов между прогонами
↗
0
0
2м 25с
0
Закрытый
14.11
AsyncClient и override зависимостей FastAPI
↗
0
0
3м 0с
0
Закрытый
14.12
Интеграционный тест GET /products
↗
1
0
5м 16с
0
15. Версионирование API и генерация тестовых данных
3 урока
1
0
19м
0
Закрытый
15.1
Версионирование API через префикс /api/v1
↗
0
0
10м 36с
0
Закрытый
15.2
Генератор тестовых продуктов на Faker
↗
0
0
4м 13с
0
Закрытый
15.3
Подключаем фабрику к seed_db и упираемся в
↗
1
0
5м 54с
0
16. Хранилище файлов: S3, MinIO и модель изображений
6 уроков
4
0
27м
0
Закрытый
16.1
Хранилище картинок: S3, MinIO и aioboto3
↗
1
0
6м 42с
0
Закрытый
16.2
S3-настройки и async-обёртка S3Storage
↗
1
0
7м 16с
0
Закрытый
16.3
ensure_bucket: автосоздание S3-бакета при старте
↗
0
0
3м 34с
0
Закрытый
16.4
Публичная политика чтения S3-бакета
↗
1
0
4м 17с
0
Закрытый
16.5
ProductImageORM: модель картинки и связь 1-к-1
↗
0
0
3м 18с
0
Закрытый
16.6
Сидинг placeholder в S3 и в product_image
↗
1
0
4м 9с
0
17. Пагинация и API v2
5 уроков
1
0
17м
0
Закрытый
17.1
Универсальная пагинация: Page[T] и PageParams
↗
0
0
3м 26с
0
Закрытый
17.2
v2-поиск по имени и описанию с пагинацией
↗
0
0
3м 57с
0
Закрытый
17.3
v2-роутер продуктов и пагинированный list
↗
0
0
7м 45с
0
Закрытый
17.4
v2-фильтрация по категории с пагинацией
↗
0
0
2м 31с
0
Закрытый
17.5
v2-фильтрация по цене с опциональными границами
↗
1
0
2м 23с
0
18. Загрузка и управление изображениями товаров
5 уроков
2
0
39м
0
Закрытый
18.1
Эндпоинт картинки товара
↗
0
0
9м 9с
0
Закрытый
18.2
put_object и delete_object в S3Storage
↗
0
0
1м 51с
0
Закрытый
18.3
upsert_image и delete_image в репозитории
↗
0
0
3м 48с
0
Закрытый
18.4
POST и DELETE для картинки товара
↗
1
0
17м 47с
0
Закрытый
18.5
Проблема: удалённые товары оставляют картинки в S3
↗
1
0
10м 47с
0
19. Модуль 16. Модуль поддержки пользователей — итоговый проект
18 уроков
3
0
83м
0
Закрытый
19.1
Каркас модуля поддержки: пакет app/support
↗
0
0
6м 35с
0
Закрытый
19.2
SupportStatus и SenderRole: enum-ы для поддержки
↗
0
0
2м 1с
0
Закрытый
19.3
ConversationORM: модель диалога поддержки
↗
0
0
6м 57с
0
Закрытый
19.4
ConversationMessageORM
↗
1
0
4м 30с
0
Закрытый
19.5
Индексы и миграция для таблиц поддержки
↗
0
0
10м 31с
0
Закрытый
19.6
Связь с админом и Pydantic-схемы модуля поддержки
↗
0
0
4м 14с
0
Закрытый
19.7
SupportRepository: каркас и методы чтения
↗
0
0
3м 16с
0
Закрытый
19.8
SupportRepository: остальные методы репозитория
↗
1
0
1м 53с
0
Закрытый
19.9
Пользовательский роутер поддержки и создание обращения
↗
0
0
6м 26с
0
Закрытый
19.10
Пагинированный список обращений пользователя
↗
0
0
3м 4с
0
Закрытый
19.11
Просмотр обращения и проверка владельца
↗
0
0
7м 4с
0
Закрытый
19.12
Отправка сообщения в обращение
↗
0
0
5м 39с
0
Закрытый
19.13
Отметка обращения как прочитанного
↗
0
0
3м 14с
0
Закрытый
19.14
Админский роутер: список всех обращений
↗
0
0
8м 4с
0
Закрытый
19.15
Счётчики обращений для админки
↗
0
0
4м 0с
0
Закрытый
19.16
Просмотр любого обращения админом
↗
0
0
5м 17с
0
Закрытый
19.17
Ответ админа на обращение
↗
0
0
3м 51с
0
Закрытый
19.18
Закрытие обращения: владелец или админ
↗
1
0
4м 50с
0
20. Публичный API и финальные штрихи
6 уроков
2
0
36м
0
Закрытый
20.1
Флаг featured для продуктов
↗
0
0
5м 41с
0
Закрытый
20.2
Выборка избранных товаров с добивкой случайными
↗
0
0
4м 32с
0
Закрытый
20.3
Публичный endpoint избранных товаров
↗
0
0
6м 40с
0
Закрытый
20.4
Категории с количеством товаров (агрегация)
↗
0
0
6м 21с
0
Закрытый
20.5
Расширение seed: реальные картинки товаров
↗
1
0
9м 31с
0
Закрытый
20.6
CORS: пускаем фронтенд к API
↗
1
0
8м 40с
0
21. Что дальше
1 урок
1
1
467м
0
Закрытый
21.1
Возможно, тут появится продолжение...
↗
1
1
467м 10с
0