Шаблон проекта на Python с использованием FastAPI и принципов чистой архитектуры.
- FastAPI - современный async web framework
- asyncpg - высокопроизводительный async драйвер PostgreSQL
- Pydantic - валидация данных и настройки
- PostgreSQL - БД без использования ORM (чистый SQL)
- uv - сверхбыстрый пакетный менеджер (в 10-100 раз быстрее pip) ⚡
.
├── src/
│ ├── domain/ # Доменный слой (сущности, интерфейсы репозиториев)
│ │ ├── entities/ # Бизнес-сущности
│ │ ├── repositories/ # Интерфейсы репозиториев
│ │ └── exceptions.py # Доменные исключения
│ │
│ ├── application/ # Слой бизнес-логики
│ │ └── use_cases/ # Use Cases (сценарии использования)
│ │
│ ├── infrastructure/ # Слой инфраструктуры
│ │ ├── database/ # Работа с БД
│ │ ├── repositories/ # Реализации репозиториев
│ │ └── config.py # Конфигурация
│ │
│ └── presentation/ # Слой представления
│ ├── api/ # FastAPI роутеры и зависимости
│ └── schemas/ # Pydantic схемы для API
│
├── tests/ # Тесты
├── main.py # Точка входа
└── requirements.txt # Зависимости
- Domain Layer - независимый от внешних библиотек, содержит бизнес-логику
- Application Layer - содержит use cases, оркеструет бизнес-логику
- Infrastructure Layer - реализации репозиториев, работа с БД без ORM
- Presentation Layer - FastAPI контроллеры, схемы запросов/ответов
docker compose up
# или
make upГотово! Приложение доступно на http://localhost:8000
📖 Подробнее: docs/DOCKER.md
Идеально для разработки с hot-reload:
docker compose up db -d
# или
make dbС uv (рекомендуется, в 10-100 раз быстрее):
curl -LsSf https://astral.sh/uv/install.sh | sh
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"Или с pip:
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txtDATABASE_HOST=localhost
DATABASE_PORT=5432
DATABASE_NAME=cleanarch_db
DATABASE_USER=postgres
DATABASE_PASSWORD=postgrespython -m src.infrastructure.database.migration_runnerpython main.py
# или
make devПриложение доступно на http://localhost:8000
БД доступна на localhost:5432
💡 Быстрый workflow:
make db # запусти БД
make dev # запусти приложение- Swagger UI: http://localhost:8000/docs - интерактивная документация
- ReDoc: http://localhost:8000/redoc - альтернативная документация
- api.http - REST Client для VS Code ⭐
- docs/API_EXAMPLES.md - примеры запросов
- ARCHITECTURE.md - архитектура проекта
- docs/DOCKER.md - Docker и docker-compose
- docs/UV.md - uv пакетный менеджер
- docs/MIGRATIONS.md - работа с миграциями
- docs/database_libraries_comparison.md - сравнение библиотек для БД
pytest
pytest --cov=src tests/ # с покрытием- ✅ Чистая архитектура - разделение на domain/application/infrastructure/presentation
- ✅ asyncpg - максимальная производительность (в 3-5 раз быстрее psycopg2)
- ✅ Без ORM - полный контроль над SQL запросами
- ✅ Connection Pool - эффективное управление соединениями
- ✅ Dependency Injection - через FastAPI Depends
- ✅ Type Hints - полная типизация
- ✅ Repository Pattern - абстракция работы с данными
- ✅ Use Cases - чёткие бизнес-сценарии
Открой api.http в VS Code с REST Client extension и кликай "Send Request".
./scripts/test_api.sh
# или
make api-testcurl -X POST http://localhost:8000/users/ \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "name": "John Doe"}'
curl http://localhost:8000/users/1
curl http://localhost:8000/users/📖 Все способы и примеры: docs/API_EXAMPLES.md