Booking-FastAPI - это упрощенный сервис Бронирования Отелей. Он позволяет зарегистрироваться, забронировать отель и отменить бронь.
- Создал веб-API с автоматической интерактивной документацией при помощи Python,
FastAPIиPydantic; - Асинхронно использовал
SQLAlchemyдля быстрой обработки запросов; - Выбрал
PostgreSQLв качестве СУБД; - Внедрил миграции для управления версиями БД при помощи
Alembic; - Подключил
JWTдля обеспечения безопасности и управления сессиями пользователей; - Добавил админ-панель (библиотека
SQLAdminсовместимая с SQLAlchemy и FastAPI); - Для написания и выполнения тестов выбрал
Pytest; - Применил Docker-Compose для связи нескольких сервисов (
Nginx,API,Postgres-DB,Redis,Celery,Flower); - Настроил
Nginxдля работы на локальном хосте; - Использовал инструменты для разработки:
PDM,Ruff,Black,isort.
Для форматирования кода используются Black и isort (с профилем Black).
Для статического анализа кода используется Ruff.
PDM, кроме работы с зависимостями, позволяет использовать скрипты для автоматизации процессов проверки и форматирования кода.
Вызов скрипта: pdm run lint_src
Скрипт из
pyproject.toml:[tool.pdm.scripts]
lint_src = {composite = [
"ruff check ./src --fix --show-fixes",
"black ./src",
"ruff check ./src --fix --show-fixes",
"alembic check",
]}
При запуске через Docker Compose файл .env.dev заменяется на .env.prod (настройка docker-compose.yml).
При тестировании файл .env.dev заменяется на .env.test (с помощью библиотеки pytest-dotenv).
Для этого в
pyproject.tomlдобавлено:[tool.pytest.ini_options]
env_files = [".env.test",]
Для запуска тестов из консоли необходимо явно указать .env файл:
pdm run pytest --envfile .env.test -s -v
AUTH_SECRET_KEY в .env файлах
from secrets import token_bytes
from base64 import b64encode
print(b64encode(token_bytes(32)).decode())
-
Установить:
-
Склонировать репозиторий:
git clone git@github.com:Bllagden/Booking-FastAPI.git cd Booking-FastAPI -
Установить зависимости:
pdm install -
Создать .env файлы:
.env.dev,.env.testи.env.prodпо аналогии с:
.env_example.dev,.env_example.testи.env_example.prod
(.env.prodнеобязателен) -
Настройка БД:
Создать Postgres-DB и вписать настройки для подключения к ней в
.envфайлы.Находясь в корне
Booking-FastAPIсделать миграцию:pdm run alembic upgrade head -
Настройка Celery:
Включить двухэтапную аутентификацию и создать пароль приложения в настройках Google аккаунта для отправки электронных писем через
Celery. Добавить пароль приложения и почту в.envфайлы (SMTP). -
Запуск:
Запустить
redis-server;Открыть
Booking-FastAPIчерез VSCode и изRun and Debugзапустить:
Booking FastAPI,Celery WorkerиCelery Flower(настройки находятся в.vscode/launch.json). -
Доступ:
API: http://127.0.0.1:8000/docs
Admin: http://127.0.0.1:8000/admin
Flower: http://127.0.0.1:5555
-
Склонировать репозиторий:
git clone git@github.com:Bllagden/Booking-FastAPI.git cd Booking-FastAPI -
Создать .env файлы:
.env.dev,.env.testи.env.prodпо аналогии с:
.env_example.dev,.env_example.testи.env_example.prod
(.env.devи.env.testнеобязательны) -
Настройка Celery:
Включить двухэтапную аутентификацию и создать пароль приложения в настройках Google аккаунта для отправки электронных писем через
Celery. Добавить пароль приложения и почту в.envфайлы (SMTP). -
Запуск:
docker-compose up -
Доступ:
API:
http://YOUR_IP/docs
Admin:http://YOUR_IP/admin
Flower:http://YOUR_IP/flower/
Для контейнеров
booking_app,booking_nginxиbooking_celeryнаписаны отдельные Docker-файлы.
Для заполнения DEV-DB или PROD-DB можно использовать данные (запросы) из файла src/db/initial_data.sql.
Настройки для PgAdmin, если взять их из .env_examples:
-
DEV-DB(необходимо создать для запуска приложения из VSCode)Host:
localhost
Port:5432
Main db:fastapi_booking_dev
Username:postgres
Password:postgres -
PROD-DB(создается сама в докер-контейнере, есть возможность подключиться к ней извне)Host:
YOUR_IP
Port:5433
Main db:booking_app
Username:postgres_user
Password:postgres_password*нужен сложный пароль -
TEST-DB(во время тестов заполняется сама данными из mock-файлов; создается также, как иDEV-DB, но с другим именем)Main db:
fastapi_booking_test
Проект на данный момент развернут только в локальной среде. В планах его полное развертывание, правильная работа со статическими файлами через Nginx, внедрение версионирования API и системы авторизации (сейчас у всех аутентифицированных пользователей одинаковые права).




