antvch / fastapi_async_template

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Структура проекта

Общая структура

В корне проекта находятся следующие директории:

  • alembic Содержит настройки и файлы миграций alembic.
  • assets Директория для статических файлов проекта. Например, шрифты или изображения.
  • docker Содержит файлы, необходимые для запуска проекта внутри контейнеров docker.
  • src Директория с исходным кодом проекта.
  • storage Папка для файлов, которые генерируются в процессе работы кода. Например, логи, изображения, xls, csv и т.д.

Директория src

Директория src содержит в себе основной исходный код проекта:

  • modules Папка с модулями. Каждый модуль отвечает за отдельный функционал приложения.
  • db.py Файл конфигурации и инициализации подключения к БД.
  • main.py Файл, отвечающий за запуск всего приложения. Инициализирует FastAPI, его роуты и middleware. Содержит глобальные обработчики exception.
  • routers.py Файл, отвечающий за подключение роутов из модулей. Каждый раз при создании нового модуля, необходимо подключать его роуты в данном файле.

Структура модуля

Директория модуля может иметь следующую структуру:

  • exceptions Содерждит в себе все исключения, которые может вызывать модуль.
  • jobs Фоновые задачи, которые выполняются по расписанию. За даннуб логику отвечает библиотека apscheduler. Инициализация фоновых задач происходит в момент запуска FastAPI (событие startup) в main.py.
  • middlewares Middleware модуля. Глобальные middleware необходимо подключать в main.py (https://fastapi.tiangolo.com/tutorial/middleware/). Локальные middleware (работающие только для некоторых роутов), можно подключать через Depends.
  • models Модели модуля.
  • requests Содержит классы запросов pydantic.
  • responses Содержит классы ответов pydantic на запросы.
  • routes Содержит роуты модуля. Отвечает за реализацию основной логики модуля. Модуль может иметь несколько файлов c роутами для разделения функционала. Например, модуль для работы с пользователями может иметь файлы register.py для работы с логикой регистрации и файлы user.py, который содержит функционал для уже зарегистрированного пользователя.
  • services Вспомогательные сервисы модуля.
  • router.py Используется для подключения всех роутов модуля.

Запуск проекта для локальной разработки

Запуск проекта происходит через docker. Для этого надо выполнить команду из папки проекта:

docker compose -f .\docker\local\docker-compose.yml up -d

Генерация миграций alembic

Для автоматической генерации файлов миграций необходимо выполнить команду внутри контейнера приложения:

alembic -c alembic/alembic.ini revision -m "migration description" --autogenerate

Каждый раз при добавлении новой модели необходимо импортировать ее в env.py (например, from modules.module1.models.user import User), для того, чтобы alembic сгенерировал миграцию.

About


Languages

Language:Python 93.3%Language:Mako 4.5%Language:Dockerfile 2.1%