Мы используем cookie для стабильной работы сервиса. Подробнее

Python: Антикризисный FastAPI

ФорматОнлайн
Объём21 занятий
О курсе

Подробнее

Цель курса — провести вас от знания синтаксиса Python до умения писать и объяснять полноценный backend-сервис так, как это делают в реальных командах. Вы не получаете готовый проект — вы выращиваете его сами, шаг за шагом Почему именно этот курс. Главное отличие — эволюция. За более чем 150 уроков вы пройдёте весь путь: от приложения в пару строк до сервиса с несколькими базами данных, миграциями, тестированием, контролем доступа по ролям, публичными API и версионированием. Каждый шаг — отдельный коммит в репозитории, к которому можно вернуться и сравнить со своим кодом. Стек подобран под 2026 год: bcrypt, PyJWT, SQLAlchemy 2.0, asyncpg, Pydantic v2 — без устаревших библиотек. Что входит в курс: Основы REST API на FastAPI: эндпоинты, Pydantic-схемы, CRUD, поиск и фильтры Работа с данными: от сырого SQL до асинхронного PostgreSQL через SQLAlchemy 2.0 Миграции схемы через Alembic Аутентификация, JWT, роли и аудит-логирование Тестирование: юнит- и интеграционные тесты с первых уроков Версионирование API, пагинация, файловое хранилище S3 Модуль поддержки пользователей как итоговый проект и инфраструктура (Docker Compose, .env, CORS, uv, Makefile) Что нужно будет делать: смотреть видеоуроки и повторять за ними код, читать текстовые опорники, проходить проверочные тесты и выполнять самостоятельные работы по техническим заданиям. Готовые решения можно прислать на личную проверку 🔗 Залетайте в телеграм, если есть такая возможность    
Требования

Что нужно для старта

  • Чтобы курс не оказался слишком сложным, желательно иметь:
  • Уверенное знание базового Python: переменные, функции, классы, импорты, работа со списками и словарями
  • Базовое представление о том, что такое веб-сервис и HTTP (запрос/ответ)
  • Готовность установить Docker и работать в редакторе кода (в курсе используется VS Code)
  • Предварительный опыт с FastAPI, базами данных, async и тестами не требуется — всему этому мы учимся с нуля внутри курса
Результат

Что вы получите

  • Разрабатывать REST API на FastAPI с валидацией через Pydantic v2 и автоматической OpenAPI/Swagger-документацией
  • Проектировать схему базы данных и вести её эволюцию через миграции Alembic, пройдя путь от списка в памяти к SQLite и затем к асинхронному PostgreSQL (asyncpg + SQLAlchemy 2.0)
  • Реализовывать аутентификацию и авторизацию: хэширование паролей через bcrypt, JWT-токены, роли и контроль доступа через Depends
  • Писать юнит- и интеграционные тесты на pytest и httpx с изоляцией тестов и собственной тестовой базой
  • Работать с файловым хранилищем S3 через aioboto3 и каскадной чисткой через события SQLAlchemy
  • Строить версионирование API (v1/v2), пагинацию, фильтры, аудит-логирование действий и модуль поддержки пользователей
  • Поднимать всё окружение (приложение + PostgreSQL + MinIO) одной командой через Docker Compose
Аудитория

Для кого этот курс

  • Курс предназначен для тех, кто уже знаком с основами Python (функции, классы, синтаксис), но ещё не писал настоящих веб-сервисов. Это подходит, если вы прошли вводные курсы или туториалы, устали от бесконечных «Hello World» и хотите увидеть, как строится хотя бы базовая архитектура реального сервиса. Также курс будет полезен тем, кто делает первые уверенные шаги в backend, хочет усилить портфолио настоящим проектом или подготовиться к собеседованию на junior-позицию. Он не рассчитан на тех, кто ещё не освоил базу языка, и на опытных backend-разработчиков с многолетним стажем на Python и FastAPI в частности
Содержание

Программа курса

21 занятие
ТемаЧто внутри
01Первые шаги

- Python–старт

02Основы REST API и HTTP (общая теория)

- Теория ключевых аспектов
- Есть вопросик...

03Первое приложение на FastAPI

- Инициализация проекта в VS Code
- От def к async def
- Техническое задание на сервис
- Первый эндпоинт со списком товаров
- Аннотации типов для PRODUCTS
- Получение товара по ID и обработка 404
- Поиск товаров по тексту
- Фильтр товаров по категории
- Самостоятельная работа: фильтр по диапазону цен

04CRUD: создание, обновление и удаление товаров

- Создание товара через POST
- Ручная валидация полей в POST
- Сбор всех ошибок валидации в одном ответе
- Пример тела запроса в Swagger
- Полная замена товара через PUT
- Удаление товара через DELETE
- От example к examples в OpenAPI
- Подготовка: Pydantic v2 в зависимостях

05Pydantic, обработка ошибок и структура проекта

- Pydantic-модели ProductBase и Product
- response_model и доступ через точку в GET
- Field-валидация и ProductCreate в POST
- Самостоятельная работа: Pydantic в PUT
- Доступ через точку в DELETE
- Рефакторинг
- Кастомные русские сообщения об ошибках
- Локализация ошибки product_id
- Рефакторинг: выносим приложение в пакет app
- Pydantic-схемы — в app/schemas.py
- Обработка ошибок — в app/errors.py

06Основы баз данных и SQL (общая теория)

- Зачем нужны базы данных
- Установка и настройка окружения для работы с SQLite
- Основные концепции структуры базы данных
- Отношения в базе данных
- Что такое SQL и система типов
- Создание таблиц
- Ограничения SQL
- Добавление записей
- Самостоятельная работа: наполнение данными
- Выборка данных
- Фильтрация данных
- Оператор обновления данных
- Самостоятельная работа на обновление данных
- Оператор удаления данных
- Самостоятельная работа: создание и наполнение базы данных
- Сложные концепции
- Самостоятельная работа на сложные запросы
- Сложные запросы
- Самостоятельная работа на объединение

07База данных SQLite и слой репозитория

- Подключаем SQLite через SQLAlchemy
- Асинхронная настройка SQLAlchemy
- Инициализация БД и lifespan FastAPI
- Клиенты для работы с БД и .gitignore
- Сидирование БД начальными данными
- Репозиторий и dependency injection
- Получение списка продуктов из БД
- Получение по id и функция ensure_found
- Поиск с пользовательской SQL-функцией PY_LOWER
- Фильтр по категории через PY_LOWER
- Фильтр по диапазону цен через BETWEEN и COALESCE
- Обновление товара через репозиторий
- Удаление через репозиторий и финал перехода
- Уникальность имени и IntegrityError → 409 Conflict

08Переход на SQLAlchemy ORM

- ORM-модель ProductORM на DeclarativeBase
- Инициализация схемы через ORM-модель
- Seed на ORM с проверкой «уже сидировано»
- list_all через select() и from_attributes
- get_by_id через session.get
- Создание товара через session.add и refresh
- Обновление через setattr и dirty-tracking
- Унификация возвращаемых типов через model_validate
- Удаление через ORM с возвратом сущности
- Поиск на SQLAlchemy Core: select, or_, func
- Фильтры по категории и цене на ORM-запросах
- Подведение итогов: текущее состояние сервиса

09Модуль 6. Модульные роутеры и пользователи

- APIRouter и модульная регистрация маршрутов
- Вынос продуктовых эндпоинтов в отдельный роутер
- ORM-модели пользователей и ролей
- Сидирование admin-пользователя и привязка товаров
- Схемы и каркас репозитория пользователей
- Реализация методов UserRepository
- Регистрация пользователей через роутер auth

10Аутентификация и авторизация: JWT и роли

- JWT-токены: теория аутентификации
- Создание и проверка JWT через PyJWT
- Логин и OAuth2PasswordRequestForm
- get_current_user и CurrentUser-зависимость
- Первый защищённый эндпоинт: search
- Проверка владельца и роли в продуктовых эндпоинтах
- Хеширование паролей через bcrypt
- Роутер users и эндпоинт /users/me
- Смена пароля через PATCH /users/me/password
- AdminUser-зависимость и список пользователей
- Активация и деактивация пользователей

11Аудит действий через event listeners

- AuditLog: модель, репозиторий, схема
- Аудит-логирование через отдельный сервис
- Эндпоинты просмотра аудита
- Теория
- ORM-listener'ы и ContextVar для actor_id
- HTTP middleware для actor_id
- Уборка явных вызовов audit.record
- Аудит изменений продуктов через ORM events

12Переезд на PostgreSQL и Docker

- Подготовка к переезду на PostgreSQL: установка Docker
- Экспресс-погружение в Docker
- docker-compose.yml с PostgreSQL
- Переезд на PostgreSQL через asyncpg
- Нормализация поиска через lower и replace для Postgres
- Dockerfile для приложения
- Pydantic Settings и переменные окружения
- SECRET_KEY и TTL токена в env-переменных
- ADMIN_PASSWORD в переменных окружения
- FastAPI в Compose рядом с Postgres
- Compose-профили dev и prod
- Makefile: алиасы для частых команд

13Миграции схемы через Alembic

- Миграции схемы БД: зачем нужны
- Установка Alembic и структура миграций
- env.py: метаданные моделей и URL из Settings
- Первая миграция: init schema
- Запуск миграций на старте приложения
- Поле created_at и автогенерация миграции
- Переименование колонки и почему Alembic его «не видит»
- Alembic в Dockerfile и команды миграций в Makefile

14Тестирование: от юнитов до интеграционных тестов

- pytest: первая инфраструктура тестов
- Формы assert и измерение покрытия
- Первые «живые» тесты — модуль security
- А что, если ты тестировщик: анализ граничных значений
- FastAPI TestClient: API-тест без поднятия сервера
- Async-тесты в pytest и режим asyncio_mode = "auto"
- Тестируем Pydantic-схему: фикстуры и валидация
- Отдельный тестовый Postgres в docker-compose
- conftest.py: тестовый engine, sessionmaker и session
- Проверка изоляции тестов между прогонами
- AsyncClient и override зависимостей FastAPI
- Интеграционный тест GET /products

15Версионирование API и генерация тестовых данных

- Версионирование API через префикс /api/v1
- Генератор тестовых продуктов на Faker
- Подключаем фабрику к seed_db и упираемся в

16Хранилище файлов: S3, MinIO и модель изображений

- Хранилище картинок: S3, MinIO и aioboto3
- S3-настройки и async-обёртка S3Storage
- ensure_bucket: автосоздание S3-бакета при старте
- Публичная политика чтения S3-бакета
- ProductImageORM: модель картинки и связь 1-к-1
- Сидинг placeholder в S3 и в product_image

17Пагинация и API v2

- Универсальная пагинация: Page[T] и PageParams
- v2-поиск по имени и описанию с пагинацией
- v2-роутер продуктов и пагинированный list
- v2-фильтрация по категории с пагинацией
- v2-фильтрация по цене с опциональными границами

18Загрузка и управление изображениями товаров

- Эндпоинт картинки товара
- put_object и delete_object в S3Storage
- upsert_image и delete_image в репозитории
- POST и DELETE для картинки товара
- Проблема: удалённые товары оставляют картинки в S3

19Модуль 16. Модуль поддержки пользователей — итоговый проект

- Каркас модуля поддержки: пакет app/support
- SupportStatus и SenderRole: enum-ы для поддержки
- ConversationORM: модель диалога поддержки
- ConversationMessageORM
- Индексы и миграция для таблиц поддержки
- Связь с админом и Pydantic-схемы модуля поддержки
- SupportRepository: каркас и методы чтения
- SupportRepository: остальные методы репозитория
- Пользовательский роутер поддержки и создание обращения
- Пагинированный список обращений пользователя
- Просмотр обращения и проверка владельца
- Отправка сообщения в обращение
- Отметка обращения как прочитанного
- Админский роутер: список всех обращений
- Счётчики обращений для админки
- Просмотр любого обращения админом
- Ответ админа на обращение
- Закрытие обращения: владелец или админ

20Публичный API и финальные штрихи

- Флаг featured для продуктов
- Выборка избранных товаров с добивкой случайными
- Публичный endpoint избранных товаров
- Категории с количеством товаров (агрегация)
- Расширение seed: реальные картинки товаров
- CORS: пускаем фронтенд к API

21Что дальше

- Возможно, тут появится продолжение...

01Первые шаги

- Python–старт

02Основы REST API и HTTP (общая теория)

- Теория ключевых аспектов
- Есть вопросик...

03Первое приложение на FastAPI

- Инициализация проекта в VS Code
- От def к async def
- Техническое задание на сервис
- Первый эндпоинт со списком товаров
- Аннотации типов для PRODUCTS
- Получение товара по ID и обработка 404
- Поиск товаров по тексту
- Фильтр товаров по категории
- Самостоятельная работа: фильтр по диапазону цен

04CRUD: создание, обновление и удаление товаров

- Создание товара через POST
- Ручная валидация полей в POST
- Сбор всех ошибок валидации в одном ответе
- Пример тела запроса в Swagger
- Полная замена товара через PUT
- Удаление товара через DELETE
- От example к examples в OpenAPI
- Подготовка: Pydantic v2 в зависимостях

05Pydantic, обработка ошибок и структура проекта

- Pydantic-модели ProductBase и Product
- response_model и доступ через точку в GET
- Field-валидация и ProductCreate в POST
- Самостоятельная работа: Pydantic в PUT
- Доступ через точку в DELETE
- Рефакторинг
- Кастомные русские сообщения об ошибках
- Локализация ошибки product_id
- Рефакторинг: выносим приложение в пакет app
- Pydantic-схемы — в app/schemas.py
- Обработка ошибок — в app/errors.py

06Основы баз данных и SQL (общая теория)

- Зачем нужны базы данных
- Установка и настройка окружения для работы с SQLite
- Основные концепции структуры базы данных
- Отношения в базе данных
- Что такое SQL и система типов
- Создание таблиц
- Ограничения SQL
- Добавление записей
- Самостоятельная работа: наполнение данными
- Выборка данных
- Фильтрация данных
- Оператор обновления данных
- Самостоятельная работа на обновление данных
- Оператор удаления данных
- Самостоятельная работа: создание и наполнение базы данных
- Сложные концепции
- Самостоятельная работа на сложные запросы
- Сложные запросы
- Самостоятельная работа на объединение

07База данных SQLite и слой репозитория

- Подключаем SQLite через SQLAlchemy
- Асинхронная настройка SQLAlchemy
- Инициализация БД и lifespan FastAPI
- Клиенты для работы с БД и .gitignore
- Сидирование БД начальными данными
- Репозиторий и dependency injection
- Получение списка продуктов из БД
- Получение по id и функция ensure_found
- Поиск с пользовательской SQL-функцией PY_LOWER
- Фильтр по категории через PY_LOWER
- Фильтр по диапазону цен через BETWEEN и COALESCE
- Обновление товара через репозиторий
- Удаление через репозиторий и финал перехода
- Уникальность имени и IntegrityError → 409 Conflict

08Переход на SQLAlchemy ORM

- ORM-модель ProductORM на DeclarativeBase
- Инициализация схемы через ORM-модель
- Seed на ORM с проверкой «уже сидировано»
- list_all через select() и from_attributes
- get_by_id через session.get
- Создание товара через session.add и refresh
- Обновление через setattr и dirty-tracking
- Унификация возвращаемых типов через model_validate
- Удаление через ORM с возвратом сущности
- Поиск на SQLAlchemy Core: select, or_, func
- Фильтры по категории и цене на ORM-запросах
- Подведение итогов: текущее состояние сервиса

09Модуль 6. Модульные роутеры и пользователи

- APIRouter и модульная регистрация маршрутов
- Вынос продуктовых эндпоинтов в отдельный роутер
- ORM-модели пользователей и ролей
- Сидирование admin-пользователя и привязка товаров
- Схемы и каркас репозитория пользователей
- Реализация методов UserRepository
- Регистрация пользователей через роутер auth

10Аутентификация и авторизация: JWT и роли

- JWT-токены: теория аутентификации
- Создание и проверка JWT через PyJWT
- Логин и OAuth2PasswordRequestForm
- get_current_user и CurrentUser-зависимость
- Первый защищённый эндпоинт: search
- Проверка владельца и роли в продуктовых эндпоинтах
- Хеширование паролей через bcrypt
- Роутер users и эндпоинт /users/me
- Смена пароля через PATCH /users/me/password
- AdminUser-зависимость и список пользователей
- Активация и деактивация пользователей

11Аудит действий через event listeners

- AuditLog: модель, репозиторий, схема
- Аудит-логирование через отдельный сервис
- Эндпоинты просмотра аудита
- Теория
- ORM-listener'ы и ContextVar для actor_id
- HTTP middleware для actor_id
- Уборка явных вызовов audit.record
- Аудит изменений продуктов через ORM events

12Переезд на PostgreSQL и Docker

- Подготовка к переезду на PostgreSQL: установка Docker
- Экспресс-погружение в Docker
- docker-compose.yml с PostgreSQL
- Переезд на PostgreSQL через asyncpg
- Нормализация поиска через lower и replace для Postgres
- Dockerfile для приложения
- Pydantic Settings и переменные окружения
- SECRET_KEY и TTL токена в env-переменных
- ADMIN_PASSWORD в переменных окружения
- FastAPI в Compose рядом с Postgres
- Compose-профили dev и prod
- Makefile: алиасы для частых команд

13Миграции схемы через Alembic

- Миграции схемы БД: зачем нужны
- Установка Alembic и структура миграций
- env.py: метаданные моделей и URL из Settings
- Первая миграция: init schema
- Запуск миграций на старте приложения
- Поле created_at и автогенерация миграции
- Переименование колонки и почему Alembic его «не видит»
- Alembic в Dockerfile и команды миграций в Makefile

14Тестирование: от юнитов до интеграционных тестов

- pytest: первая инфраструктура тестов
- Формы assert и измерение покрытия
- Первые «живые» тесты — модуль security
- А что, если ты тестировщик: анализ граничных значений
- FastAPI TestClient: API-тест без поднятия сервера
- Async-тесты в pytest и режим asyncio_mode = "auto"
- Тестируем Pydantic-схему: фикстуры и валидация
- Отдельный тестовый Postgres в docker-compose
- conftest.py: тестовый engine, sessionmaker и session
- Проверка изоляции тестов между прогонами
- AsyncClient и override зависимостей FastAPI
- Интеграционный тест GET /products

15Версионирование API и генерация тестовых данных

- Версионирование API через префикс /api/v1
- Генератор тестовых продуктов на Faker
- Подключаем фабрику к seed_db и упираемся в

16Хранилище файлов: S3, MinIO и модель изображений

- Хранилище картинок: S3, MinIO и aioboto3
- S3-настройки и async-обёртка S3Storage
- ensure_bucket: автосоздание S3-бакета при старте
- Публичная политика чтения S3-бакета
- ProductImageORM: модель картинки и связь 1-к-1
- Сидинг placeholder в S3 и в product_image

17Пагинация и API v2

- Универсальная пагинация: Page[T] и PageParams
- v2-поиск по имени и описанию с пагинацией
- v2-роутер продуктов и пагинированный list
- v2-фильтрация по категории с пагинацией
- v2-фильтрация по цене с опциональными границами

18Загрузка и управление изображениями товаров

- Эндпоинт картинки товара
- put_object и delete_object в S3Storage
- upsert_image и delete_image в репозитории
- POST и DELETE для картинки товара
- Проблема: удалённые товары оставляют картинки в S3

19Модуль 16. Модуль поддержки пользователей — итоговый проект

- Каркас модуля поддержки: пакет app/support
- SupportStatus и SenderRole: enum-ы для поддержки
- ConversationORM: модель диалога поддержки
- ConversationMessageORM
- Индексы и миграция для таблиц поддержки
- Связь с админом и Pydantic-схемы модуля поддержки
- SupportRepository: каркас и методы чтения
- SupportRepository: остальные методы репозитория
- Пользовательский роутер поддержки и создание обращения
- Пагинированный список обращений пользователя
- Просмотр обращения и проверка владельца
- Отправка сообщения в обращение
- Отметка обращения как прочитанного
- Админский роутер: список всех обращений
- Счётчики обращений для админки
- Просмотр любого обращения админом
- Ответ админа на обращение
- Закрытие обращения: владелец или админ

20Публичный API и финальные штрихи

- Флаг featured для продуктов
- Выборка избранных товаров с добивкой случайными
- Публичный endpoint избранных товаров
- Категории с количеством товаров (агрегация)
- Расширение seed: реальные картинки товаров
- CORS: пускаем фронтенд к API

21Что дальше

- Возможно, тут появится продолжение...

Организатор

Автор курса

StepikStepik
Stepik — образовательная платформа и конструктор онлайн-курсов. Мы разрабатываем алгоритмы адаптивного обучения, сотрудничаем с авторами MOOC, помогаем в проведении олимпиад и программ переподготовки. Наша цель — сделать образование открытым и удобным. Stepik — широко известная российская образовательная платформа, основанная в 2013 году. На Stepik зарегистрировано более миллиона пользователей из России и стран СНГ. В настоящее время на Stepik представлены несколько тысяч учебных курсов на самые разные темы.
Подробнее об авторе
Мнения учеников

Отзывы о курсе

Оставьте отзыв

Расскажите о качестве обучения, поддержке и результате. Это поможет другим выбрать организацию осознанно.

Напишите ваш коментарий, не менее 30 символов

Нажимая кнопку, вы даете согласие на обработку персональных данных

Оставьте заявку

Консультант ответит на вопросы о курсе «Python: Антикризисный FastAPI» и поможет разобраться в деталях обучения.

Комментарий ...

Нажимая кнопку, вы даете согласие на обработку персональных данных

Информация обновлена 7 сентября 2026 г.

Продолжить выбор

Похожие курсы

Python-разработчик с нуля
−53%5 октября
Python-разработчик с нуля

«Python-разработчик с нуля» от Нетологии поможет начать карьеру в ИТ уже через 6 месяцев. Python, Git, основы разработки, реальные задания, карьерная поддержка.

Онлайн16 занятий
Помощь с трудоустройством
194 515 ₽−53%
90 900 ₽Скидка до 9 сентября
Основы языка Python
22 ак.ч.
Основы языка Python

На курсе вы получите базовые навыки программирования на языке Python. Рассматриваются темы от типов данных до объектно-ориентированного программирования. Python – чрезвычайно мощн…

Онлайн10 занятийНачальный
27 500 ₽
Начать без затрат

Бесплатные курсы

Python для решения практических задач
Бесплатно
Python для решения практических задач

Научились решать простые задачи на питоне, но не можете понять, как сделать что-то полезное? Наш курс научит вас правильно гуглить! На примерах задач сбора данных (Data Scraping)…

Онлайн5 занятий
Бесплатно
"Поколение Python": курс для начинающих
Бесплатно
"Поколение Python": курс для начинающих

"Поколение Python: курс для начинающих" знакомит с основными типами данных, конструкциями и принципами структурного программирования языка Python. Целевая аудитория – школьники, с…

Онлайн16 занятий
Бесплатно
ЛКПП (Лучший Курс По Python)
Бесплатно
ЛКПП (Лучший Курс По Python)

Курс размещен (продублирован на Степике) по согласованию и с разрешения автора - Никиты Соболева. Телеграм канал автора: Находки в опенсорсе YouTube канал автора: https://www.yout…

Онлайн2 занятий
Бесплатно
Основы анализа данных в  Python
Бесплатно
Основы анализа данных в Python

В настоящее время анализ статических данных является одним из важнейших источников получения новых знаний и поддержки принятия решений в социальных науках, экономике и бизнесе. Ис…

Онлайн3 занятий
Бесплатно