FastAPI project structure generator with best practices
Project description
FastAPI Template Generator
🚀 Генератор структуры FastAPI приложений с лучшими практиками разработки.
Создает готовую к продакшену архитектуру с модульной структурой, документацией и всеми необходимыми компонентами.
Быстрый старт
Установка
pip install fastapi-template-generator
Создание проекта
# Создать проект с указанным именем
python -m fastapi_template_generator my_awesome_api
# Создать проект с именем по умолчанию (app)
python -m fastapi_template_generator
# Создать проект без Docker файлов
python -m fastapi_template_generator my_project --no-docker
Запуск созданного проекта
cd my_awesome_api
# Создать виртуальное окружение
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Установить зависимости
pip install -r requirements.txt
# Настроить переменные окружения
cp .env.example .env
# Отредактируйте .env файл под ваши нужды
# Запустить приложение
uvicorn app:app --reload
🎉 Готово! Ваше API доступно по адресу http://localhost:8000
Что создается
Структура проекта
my_awesome_api/
├── app.py # Точка входа приложения
├── core/ # Ядро приложения
│ ├── settings.py # Настройки через pydantic-settings
│ ├── db.py # Конфигурация базы данных + инициализация
│ ├── logger.py # Настройка логирования (Loguru)
│ └── dependencies.py # Общие зависимости (БД, авторизация)
├── middleware/ # Middleware компоненты
│ ├── error_handler.py # Глобальная обработка ошибок
│ ├── logging.py # Логирование всех запросов
│ └── cors.py # CORS настройки
├── shared/ # Общие компоненты
│ ├── schemas/ # Базовые схемы (ResponseModel, Pagination)
│ └── models/ # Базовые модели для наследования
├── modules/ # Бизнес модули
│ └── echo/ # Готовый пример модуля
│ ├── router.py # API эндпоинты
│ ├── schemas.py # Pydantic модели
│ ├── services.py # Бизнес-логика
│ ├── models.py # ORM модели
│ ├── funcs.py # Вспомогательные функции
│ ├── constants.py # Константы
│ └── exceptions.py # Исключения модуля
├── utils/ # Общие утилиты
├── rules/ # 📚 Документация и best practices
├── logs/ # Папка для логов
├── requirements.txt # Зависимости Python
├── .env.example # Пример настроек окружения
├── .gitignore # Git исключения
├── pyproject.toml # Настройки форматирования (Black, isort)
├── Makefile # Команды для разработки
├── Dockerfile # Docker образ
├── docker-compose.yml # Docker Compose с PostgreSQL
└── README.md # Документация проекта
Готовые возможности
✅ Async/await из коробки - все операции асинхронные
✅ PostgreSQL + SQLAlchemy - настроенная база данных
✅ Модульная архитектура - легко масштабируемая структура
✅ Автоматическая инициализация БД - таблицы создаются при запуске
✅ Bearer токен авторизация - защита эндпоинтов
✅ Логирование Loguru - красивые структурированные логи
✅ Middleware для обработки ошибок - сервер не падает
✅ Валидация Pydantic - типизированные схемы
✅ Soft delete - безопасное удаление записей
✅ Пагинация - готовые схемы для списков
✅ Health check - мониторинг состояния
✅ Docker поддержка - контейнеризация
✅ Форматирование кода - Black + isort + flake8
✅ Документация API - автогенерируемая Swagger
✅ Best practices - правила разработки в rules/
Использование созданного проекта
API Документация
После запуска доступна по адресам:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- Health Check: http://localhost:8000/health
Примеры запросов
# Публичный эндпоинт
curl -X POST http://localhost:8000/api/echo/ \
-H "Content-Type: application/json" \
-d '{"message": "Hello World", "category": "test"}'
# Защищенный эндпоинт (требует Bearer токен)
curl -X POST http://localhost:8000/api/echo/protected \
-H "Content-Type: application/json" \
-H "Authorization: Bearer your-bearer-token-from-env" \
-d '{"message": "Protected Hello", "category": "important"}'
# Получить список всех записей
curl http://localhost:8000/api/echo/?page=1&page_size=10
Настройка окружения
Все настройки в файле .env:
# Основные настройки
APP_APP_NAME="My Awesome API"
APP_DEBUG=true
# База данных (отдельные компоненты)
APP_DB_HOST=localhost
APP_DB_PORT=5432
APP_DB_NAME=my_api_db
APP_DB_USER=postgres
APP_DB_PASSWORD=secretpassword
# Безопасность
APP_BEARER_TOKEN=your-super-secret-bearer-token
# CORS
APP_ALLOWED_ORIGINS=["http://localhost:3000", "http://localhost:8080"]
Разработка
Полезные команды
# Форматирование и проверка кода
make format # Автоформатирование (Black + isort)
make lint # Проверка стиля (flake8)
# Запуск
make dev # Запуск в режиме разработки
make run # Запуск в продакшен режиме
# Работа с базой данных
make db-check # Проверить подключение к БД
make db-init # Инициализировать БД
make db-url # Показать URL подключения
# Docker
make docker-up # Запустить через Docker Compose
make docker-down # Остановить Docker Compose
Создание нового модуля
- Создайте папку в
modules/my_module/ - Скопируйте структуру из
modules/echo/ - Адаптируйте под свою логику
- Подключите роутер в
app.py:
from modules.my_module.router import router as my_module_router
app.include_router(my_module_router, prefix="/api/my-module", tags=["my-module"])
Docker развертывание
# Запуск с PostgreSQL
docker-compose up -d
# Или только приложение
docker build -t my-api .
docker run -p 8000:8000 my-api
Архитектура
Принципы
- Модульность: каждая функция в отдельном модуле
- Слоистость: API → Service → Repository → Database
- DRY: общий код в
shared/иutils/ - Типизация: Pydantic схемы для всех данных
- Асинхронность: async/await везде
Структура модуля
# router.py - API эндпоинты
@router.get("/items", response_model=PaginatedResponse[ItemResponse])
async def get_items(pagination: PaginationParams = Depends()):
pass
# schemas.py - Pydantic модели
class ItemCreate(BaseModel):
name: str = Field(..., min_length=1, max_length=100)
# services.py - бизнес-логика
class ItemService:
async def create_item(self, db: AsyncSession, data: ItemCreate):
pass
# models.py - ORM модели
class Item(BaseModel): # Наследуется от BaseModel с id, created_at, etc.
__tablename__ = "items"
name = Column(String(100), nullable=False)
Стандартные ответы
Все API ответы в едином формате:
{
"status": "ok",
"data": {...},
"message": "Optional success message"
}
Ошибки:
{
"status": "error",
"message": "Human readable error",
"error_code": 400,
"details": {...}
}
Безопасность
- Bearer токен для защищенных эндпоинтов
- Валидация входных данных через Pydantic
- CORS настройки для фронтенда
- SQL инъекции защищены ORM
- Логирование подозрительной активности
Мониторинг
- Health check эндпоинт с проверкой БД
- Структурированные логи (консоль + файлы)
- Метрики времени обработки в заголовках ответов
- Отслеживание ошибок с stack trace
Производительность
- Async/await для всех операций
- Connection pooling для БД
- Пагинация для больших списков
- Оптимизированные запросы с proper indexing
- Мягкое удаление вместо физического
Документация
Созданный проект содержит папку rules/ с подробными правилами:
architecture.md- Принципы архитектурыnaming.md- Правила именованияdatabase.md- Работа с БДapi_design.md- Дизайн API
Опции генератора
# Справка
python -m fastapi_template_generator --help
# Создать без Docker файлов
python -m fastapi_template_generator my_project --no-docker
# Показать версию
python -m fastapi_template_generator --version
Примеры использования
Стартап MVP
python -m fastapi_template_generator my_startup_api
cd my_startup_api
# Настроить .env
make dev
Корпоративный проект
python -m fastapi_template_generator corporate_api
cd corporate_api
# Настроить production окружение
docker-compose up -d
Микросервис
python -m fastapi_template_generator user_service --no-docker
cd user_service
# Интегрировать в существующую инфраструктуру
Совместимость
- Python: 3.8+
- FastAPI: 0.104+
- SQLAlchemy: 2.0+
- PostgreSQL: 12+
- Docker: 20+
Вклад в проект
Приветствуются:
- Новые шаблоны модулей
- Улучшения архитектуры
- Дополнения в документацию
- Исправления багов
Лицензия
MIT License - используйте свободно в коммерческих и открытых проектах.
Создавайте качественные FastAPI приложения быстро и с удовольствием! 🚀
GitHub: https://github.com/daswer123/fastapi-template-generator
PyPI: https://pypi.org/project/fastapi-template-generator/
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fastapi_template_generator-0.0.1.tar.gz.
File metadata
- Download URL: fastapi_template_generator-0.0.1.tar.gz
- Upload date:
- Size: 33.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
652dea19d0caaa6587c91a9842a7de2daf1d3118106b86bc2547e0d8243ecacc
|
|
| MD5 |
708d7d657c02e6397f16a4a9da78ba9f
|
|
| BLAKE2b-256 |
16fe8cd0fb2c510318dd9f97a579059f26df6d7e538b863de46f18c27c2d1346
|
File details
Details for the file fastapi_template_generator-0.0.1-py3-none-any.whl.
File metadata
- Download URL: fastapi_template_generator-0.0.1-py3-none-any.whl
- Upload date:
- Size: 37.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.7.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7446ca6e7c2988c84bb98a1d04e83e3c2e25024658088a6316a3c6773bac35ce
|
|
| MD5 |
a16945558d768d11d866cce7487dcc45
|
|
| BLAKE2b-256 |
1fced8636a2ee80ec7e0ef0f9a2ac577676638865f23fb593fa9cb2635bfccd4
|