Шаблон современного интернет-магазина на FastAPI с админ-панелью, API и веб-интерфейсом.
- Каталог товаров с категориями, поиском и фильтрацией
- Корзина покупок с сохранением в сессии
- Система заказов с отслеживанием статуса
- Отзывы и рейтинги товаров
- Профиль пользователя с историей заказов
- Аутентификация через JWT (RS256)
- FastAPI - современный, быстрый веб-фреймворк
- SQLAlchemy 2.0 - асинхронная работа с БД
- PostgreSQL - основная база данных
- Alembic - миграции БД
- SQLAdmin - готовая админ-панель
- Jinja2 - шаблонизатор для веб-интерфейса
- JWT (RS256) - безопасная аутентификация
- Docker & Docker Compose - контейнеризация
- Nginx - reverse proxy
app/
├── admin/ # Админ-панель (SQLAdmin)
├── api/ # REST API (v1)
│ └── v1/
│ └── endpoints/
├── core/ # Конфигурация, безопасность, зависимости
├── crud/ # CRUD операции
├── models/ # SQLAlchemy модели
├── schemas/ # Pydantic схемы
├── static/ # CSS, JS, изображения
├── templates/ # HTML шаблоны
├── utils/ # Утилиты (корзина и др.)
└── web/ # Веб-интерфейс (HTML страницы)
- Python 3.14+
- uv - быстрый менеджер пакетов Python
- PostgreSQL 16+ (или Docker)
- Docker с Docker Compose plugin v2+ (для Docker-режима)
# Клонировать репозиторий
git clone <repository-url>
cd web-shop-fastapi-template
# Установить зависимости
make install# Скопировать пример конфигурации
cp .env.example .env
# Отредактировать .env файл
# Обязательно установите:
# - DB_NAME (имя базы данных)
# - ADMIN_SECRET_KEY (секретный ключ для сессий)# Создать директорию для сертификатов
mkdir -p app/core/certs
# Сгенерировать приватный ключ
openssl genrsa -out app/core/certs/jwt-private.pem 2048
# Сгенерировать публичный ключ
openssl rsa -in app/core/certs/jwt-private.pem -pubout -out app/core/certs/jwt-public.pem# Применить миграции
make db-upgrade# Запустить dev-сервер
make runПриложение будет доступно по адресу: http://localhost:8000
make install # Установить зависимости
make run # Запустить dev-сервер
make dev # Алиас для runmake fmt # Форматировать код (ruff + black)
make lint # Проверить код линтером
make type # Проверить типы (mypy)
make check # Запустить все проверки
make pre-commit # Запустить pre-commit хукиmake test # Запустить тесты
make test-v # Тесты с подробным выводом
make test-cov # Тесты с покрытиемmake migrate # Создать и применить миграцию
make migrate-create # Создать миграцию без применения
make db-upgrade # Применить все миграции
make db-downgrade # Откатить последнюю миграциюmake docker-build # Собрать образ
make docker-up # Запустить контейнеры
make docker-down # Остановить контейнеры
make docker-logs # Просмотр логов
make docker-shell # Открыть shell в контейнереmake clean # Удалить кэш и временные файлы
make clean-all # Полная очистка (включая .venv)# Запустить все сервисы
make docker-up
# Приложение доступно на http://localhostservices:
postgres: # PostgreSQL 16
app: # FastAPI приложение (порт 8000)
nginx: # Reverse proxy (порт 80)# Просмотр логов
make docker-logs
# Перезапуск сервисов
make docker-restart
# Остановка
make docker-downПроект использует JWT токены с алгоритмом RS256 (асимметричное шифрование).
POST /api/v1/auth/register- регистрацияPOST /api/v1/auth/login- входPOST /api/v1/auth/refresh- обновление токенаPOST /api/v1/auth/logout- выход
- Access Token - короткий срок жизни (15 минут по умолчанию)
- Refresh Token - длительный срок жизни (7 дней по умолчанию)
После запуска приложения доступны:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
GET /api/v1/products- список товаровGET /api/v1/products/{id}- детали товараPOST /api/v1/products- создать товар (admin)
GET /api/v1/categories- список категорийPOST /api/v1/categories- создать категорию (admin)
GET /api/v1/orders- мои заказыPOST /api/v1/orders- создать заказGET /api/v1/orders/{id}- детали заказа
GET /api/v1/cart- содержимое корзиныPOST /api/v1/cart/add- добавить товарDELETE /api/v1/cart/remove/{product_id}- удалить товар
GET /api/v1/reviews- список отзывовPOST /api/v1/reviews- оставить отзыв
Доступные страницы:
- / - главная страница
- /catalog - каталог товаров
- /product/{slug} - страница товара
- /cart - корзина
- /checkout - оформление заказа
- /account - личный кабинет
- /login - вход
- /register - регистрация
Админ-панель доступна по адресу: http://localhost:8000/admin
- Управление товарами
- Управление категориями
- Управление пользователями
- Просмотр заказов
- Управление отзывами
Права администратора настраиваются в .env:
ADMIN_CAN_CREATE=True
ADMIN_CAN_EDIT=True
ADMIN_CAN_DELETE=True
ADMIN_CAN_VIEW_DETAILS=True- name - название
- slug - URL-идентификатор
- description - описание
- price - цена
- category_id - категория
- image - изображение
- stock - остаток на складе
- is_active - активность
- name - название
- slug - URL-идентификатор
- description - описание
- user_id - пользователь
- total_price - общая стоимость
- status - статус заказа
- created_at - дата создания
- email - email (уникальный)
- username - имя пользователя
- hashed_password - хеш пароля
- is_active - активность
- is_superuser - администратор
- product_id - товар
- user_id - пользователь
- rating - оценка (1-5)
- comment - комментарий
DB_USER=postgres
DB_PASSWORD=postgres
DB_HOST=localhost
DB_PORT=5432
DB_NAME=web_shop
DB_ECHO=False # SQL логирование
DB_POOL_SIZE=5 # Размер пула соединений
DB_MAX_OVERFLOW=10 # Дополнительные соединения
DB_POOL_PRE_PING=True # Проверка соединений
DB_POOL_RECYCLE=3600 # Переиспользование соединений (сек)
DB_AUTOFLUSH=False
DB_EXPIRE_ON_COMMIT=FalseADMIN_SECRET_KEY=your-secret-key-here
ADMIN_CAN_CREATE=True
ADMIN_CAN_EDIT=True
ADMIN_CAN_DELETE=True
ADMIN_CAN_VIEW_DETAILS=TrueAUTHJWT_ACCESS_TOKEN_EXPIRE_MINUTES=15
AUTHJWT_REFRESH_TOKEN_EXPIRE_DAYS=7Основные:
- fastapi - веб-фреймворк
- uvicorn - ASGI сервер
- sqlalchemy - ORM
- asyncpg - PostgreSQL драйвер
- alembic - миграции
- sqladmin - админ-панель
- pydantic - валидация данных
- pyjwt - JWT токены
- passlib - хеширование паролей
- jinja2 - шаблоны
Инструменты разработки:
- ruff - линтер и форматтер
- black - форматтер кода
- mypy - проверка типов
- pytest - тестирование
- pre-commit - Git хуки
# Запустить все тесты
make test
# С покрытием кода
make test-cov
# Просмотр HTML отчета покрытия
open htmlcov/index.htmlПроект использует:
- Ruff - быстрый линтер и форматтер
- Black - форматтер кода
- MyPy - проверка типов
# Автоматическое форматирование
make fmt
# Проверка линтером
make lint
# Проверка типов
make type
# Все проверки сразу
make checkweb-shop-fastapi-template/
├── alembic/ # Миграции БД
│ └── versions/
├── app/
│ ├── admin/ # Админ-панель
│ │ ├── auth.py
│ │ ├── setup.py
│ │ └── views.py
│ ├── api/ # REST API
│ │ └── v1/
│ │ ├── endpoints/
│ │ └── api.py
│ ├── core/ # Ядро приложения
│ │ ├── auth.py
│ │ ├── config.py
│ │ ├── database.py
│ │ ├── deps.py
│ │ ├── handlers.py
│ │ ├── security.py
│ │ └── templates.py
│ ├── crud/ # CRUD операции
│ ├── models/ # SQLAlchemy модели
│ ├── schemas/ # Pydantic схемы
│ ├── static/ # Статические файлы
│ │ ├── css/
│ │ ├── img/
│ │ └── js/
│ ├── templates/ # HTML шаблоны
│ ├── utils/ # Утилиты
│ └── web/ # Веб-интерфейс
├── tests/ # Тесты
├── .env.example # Пример конфигурации
├── docker-compose.yml # Docker Compose
├── Dockerfile # Docker образ
├── main.py # Точка входа
├── Makefile # Make команды
└── pyproject.toml # Конфигурация проекта
-
Безопасность
- Используйте сильные SECRET_KEY
- Настройте CORS правильно
- Используйте HTTPS
- Ограничьте доступ к админ-панели
-
База данных
- Используйте connection pooling
- Настройте индексы
- Регулярные бэкапы
-
Мониторинг
- Добавьте логирование
- Настройте мониторинг ошибок
- Метрики производительности
-
Масштабирование
- Используйте Redis для кэша
- CDN для статических файлов
- Load balancer для нескольких инстансов
-
Создайте ветку для фичи
git checkout -b feature/amazing-feature
-
Внесите изменения и проверьте код
make check
-
Запустите тесты
make test -
Создайте коммит
git commit -m "Add amazing feature"
Проект использует pre-commit для автоматических проверок:
# Установить хуки
uv run pre-commit install
# Запустить вручную
make pre-commitЭтот проект является шаблоном для создания собственных веб-магазинов. Используйте его свободно для своих проектов.
Создано с использованием:
Если у вас возникли вопросы или проблемы:
- Проверьте существующие issues
- Создайте новый issue с подробным описанием
- Укажите версию Python и ОС
Создано с ❤️ для быстрого старта веб-магазинов на FastAPI