Flask API для CRUD по автомобилям с валидацией (Marshmallow) и конфигом через .env. По умолчанию использует SQLite, для продакшена рекомендован PostgreSQL.
cp .env.example .env # при необходимости правим DATABASE_URL/PORT
docker compose up --build
# API будет на http://localhost:8000/cars
# .env не копируется в образ (см. .dockerignore), секреты передавайте через envpython -m venv .venv
. .venv/bin/activate
pip install -r requirements-dev.txt
cp .env.example .env # можно оставить SQLite или указать свой PostgreSQL
python manage.py # запустит на 0.0.0.0:8000Линт и тесты:
ruff check .
black --check .
pytestGET /cars— список машин.POST /cars— создать (JSON: brand, model, year, color, engine_power, configuration, vin?, description).PUT /cars/<id>— обновить (частичный payload).DELETE /cars/<id>— удалить.DELETE /cars/delete-all— удалить все (только с заголовкомX-Admin-Token, выключен если ADMIN_TOKEN пуст).
POST /cars
{
"brand": "Toyota",
"model": "Модель A",
"year": 2022,
"color": "blue",
"engine_power": 200,
"configuration": "Комфорт"
}Ответ 201:
{"id":1,"brand":"Toyota","model":"Модель A","year":2022,"color":"blue","engine_power":200,"vin":"<auto>","configuration":"Комфорт","description":null}kanban/— app factory, модели, схемы Marshmallow, маршруты/cars, утилиты (VIN).manage.py— точка входа (локально/в Docker), создаёт БД при старте.tests/— pytest с SQLite in-memory, покрывает CRUD и уникальность VIN..env/config.py— загрузка DATABASE_URL, переключение SQLite/Postgres.
- Линт:
ruff check . - Формат:
black --check . - Тесты:
pytest(in-memory SQLite) - CI: GitHub Actions (
ci.yml) — lint + tests на Python 3.11.
Пример вызова API из Python:
import requests
base = "http://localhost:8000"
car = {
"brand": "Toyota",
"model": "Модель A",
"year": 2023,
"color": "blue",
"engine_power": 200,
"configuration": "Комфорт",
}
resp = requests.post(f"{base}/cars", json=car, timeout=5)
resp.raise_for_status()
print(resp.json())Значения model: Модель A|Модель B|Модель C. configuration: Базовая|Комфорт|Максимальная. VIN проверяется на длину 17, при отсутствии генерируется автоматически.
DATABASE_URL,PORT— как и раньше.CORS_ORIGINS— разрешенные Origin (список через запятую, по умолчанию localhost для dev).CORS_TRUSTED_ORIGINS— список Origin, с которых разрешены DELETE (по умолчанию совпадает с CORS_ORIGINS).ADMIN_TOKEN— включает защищенный/cars/delete-allи проверяется через заголовокX-Admin-Token. Если не задан, endpoint отдаёт 404.
pytest- Конфиг загружается из
.env(см..env.example). - В Docker Compose используется PostgreSQL (
DATABASE_URLпо умолчанию указывает на сервисdb); локально можно оставить SQLite. - База создаётся автоматически при старте.
- Уникальность VIN соблюдается.