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 и системы авторизации (сейчас у всех аутентифицированных пользователей одинаковые права).