Проект представляет собой пример интеграции и взаимодействия Pydantic 2.0 в связке с SQLAlchemy ORM и PostgreSQL, подключенной через асинхронную библиотеку взаимодействия с базами данных asyncpg.
Основные цели, которые ставились перед проектом:
- максимальная скорость работы
- использование асинхронных операций
- организация структуры проекта согласно лучшим практикам
- аутентификацию пользователей (JWT + cookie)
- написание асинхронных тестов (httpx + pytest-asyncio)
- соблюдение правил написания (pre-commit-hooks + black + flake8 + reorder-python-imports)
- кеширование маршрутов (fastapi-cache2)
- python
- fastapi
- sqlalchemy
- asyncpg
- alembic
- pydantic
- ipython
- passlib
- python-slugify
- httpx
- pytest-asyncio
- pre-commit
- black
- pyjwt
- fastapi-cache2
Прежде чем начать использовать FastAPI-asyncpg-sqlalchemy, убедитесь, что у вас установлен интерпретатор Python c версией не ниже 3.9:
Клонируйте репозиторий с помощью следующей команды:
git clone git@github.com:Abramov0Alexandr/FastAPI-asyncpg-sqlalchemy.git
Перейдите в директорию проекта:
cd FastAPI-asyncpg-sqlalchemy
Активируйте виртуальное окружение Poetry и установите зависимости:
poetry init poetry shell poetry install
Создайте .env файл в основной директории проекта, который будет содержать основные настройки для взаимодействия с базой данных.
touch .env
Структура проекта:
. |-- app |-- migrations |-- .env ## NEW FILE! |-- .env.sample |-- .gitignore |-- .pre-commit-config.yaml |-- alembic.ini |-- LICENSE |-- poetry.lock |-- pyproject.toml |-- README.md |-- setup.cfg
Создайте базу данных, которая будет использоваться в проекте:
psql -U <database username> create database <your database title>;
Заполните .env файл. Необходимые переменные можно увидеть в .env.sample:
vim .env
DB_USER="your database username" DB_PASSWORD="your database password" DB_HOST="default is localhost" DB_PORT="default is 5432" DB_NAME="your database title" TOKEN_LIFESPAN="token lifetime in seconds" VERIFY_SIGNATURE="set JWT signing algorithm" JWT_SECRET_KEY="secret key for JWT encoding"
Примените миграции для базы данных:
alembic upgrade head
Запустите сервер:
uvicorn app.main:app
Для запуска тестов воспользуйтесь следующей командой:
pytest -vv app/tests/
Для тестирования API, вы можете использовать автогенерируемую документацию, которая отображает весь функционал и содержит все зарегистрированные в приложении маршруты. Документацию к API вы можете найти перейдя по ссылке:
http://127.0.0.1:8000/docs/
FastAPI-asyncpg-sqlalchemy распространяется по MIT License.
Спасибо за использование FastAPI-asyncpg-sqlalchemy! Если у вас есть какие-либо вопросы или предложения, не стесняйтесь обращаться к нам.
Автор: [Alexandr Abramov https://github.com/Abramov0Alexandr]
Email: [alexandr.abramovv@gmail.com https://github.com/Abramov0Alexandr]
GitHub: [https://github.com/Abramov0Alexandr]