Это проект с реализацией CRUD API на FastAPI и Pydantic.
Все данные хранятся в виде словаря в памяти, которая очищается после перезапуска сервера.
Поддерживаются все стандартные операции: создание, чтение, обновление, удаление сущности.
Также есть фильтрация и сортировка через query-параметры.
Подключены фоновые selery-задачи с брокером Redis.
Можно запускать как локально, так и через Docker Compose.
- app/
- init.py - Инициализация директории как пакета Python
- main.py - Реализация эндпоинтов и основной логики FastAPI
- schemas.py - Pydantic-схемы
- storage.py - Словарь данных и генерация id
- tasks.py - Celery-задачи
- celery_worker.py - Код для запуска Celery-воркера
- docker-compose.yml - Конфигурация для запуска сети контейнеров
- Dockerfile - Конфигурация сборки и запуска приложения в контейнере
- README.md - Описание проекта и инструкций по запуску
- requirements.txt - Зависимости
-
Клонируйте репозиторий:
git clone https://github.com/SlavaKlkv/fastapi-pydantic.git
-
Перейдите в корень проекта:
cd fastapi-pydantic
-
Создайте и активируйте виртуальное окружение:
python -m venv venv
Для Linux/macOS:
source venv/bin/activate
Для Windows:
venv\Scripts\activate
-
Установите зависимости и redis-сервер:
pip install -r requirements.txt
brew install redis
-
Запустите сервера и selery-воркера
-
Запуск uvicorn с автоперезагрузкой после сохранения обновленного кода:
uvicorn app.main:app --reload
-
Запуск redis-сервера (в другом терминале):
redis-server
-
Запуск воркера (в третьем терминале; он будет выводить сообщения из задач):
celery -A app.tasks worker --loglevel=info
Запуск приложения
docker compose up
Для запуска без пересборки образа с пересозданием контейнеров даже,
если не было изменений:
docker compose up --build --force-recreate
Для пересборки образа без использования кеша:
docker compose build --no-cache
docker compose up
Остановка всех контейнеров:
- Если запущено обычно:
Ctrl + C
- Если запущено в фоне:
docker compose down
'http://127.0.0.1:8000/docs'
В развернутом поле запроса будет информация о нем - параметры, тело, ответы.
Чтобы выполнить запрос,
нажмите на Try it out
, расположенную под описанием справа,
и после заполнения (при необходимости) execute
GET /entities/
Parameters
Можно указать поля фильтрации и сортировки с определенным порядком
Ответ:
[
{
"name": "string",
"value": 27,
"id": 1
},
{
"name": "entity",
"value": 33,
"id": 2
}
]
PATCH /entities/{entity_id}
Parameters
entity_id 1
Тело запроса:
{
"name": "new_name"
}
Ответ:
{
"name": "new_name",
"value": 27,
"id": 1
}
-
Для упорядочивания импортов:
isort .
-
Для проверки соответствия PEP8:
flake8 .
MIT