Проект представляет собой пример интеграции и взаимодействия 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]