Асинхронное приложение на FastAPI для управления благотворительными проектами и пожертвованиями.
Пользователи могут делать пожертвования, а суперпользователи — создавать и редактировать проекты.
Все средства автоматически распределяются между открытыми проектами.
- Регистрация и аутентификация пользователей (JWT).
- Управление проектами (CRUD, доступно только суперпользователям).
- Создание пожертвований (для авторизованных пользователей).
- Автоматическое распределение пожертвований по проектам.
- Swagger-документация доступна по адресу
/docs
.
Python 3.10+
FastAPI
Pydantic
SQLAlchemy (async)
Alembic
Uvicorn
FastAPI Users
Pytest
Flake8
- Клонируйте репозиторий и перейдите в директорию проекта:
git clone [email protected]:abramov-v/cat_charity_fund.git
cd cat_charity_fund
- Создайте и активируйте виртуальное окружение:
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
- Установите зависимости:
pip install -r requirements.txt
- Настройте переменные окружения:
Скопируйте файл .env.example
и создайте на его основе .env
:
cp .env.example .env
Пример содержимого .env:
APP_TITLE=Благотворительный фонд поддержки котиков - QRKot
APP_DESC=Приложение для управления благотворительными проектами
DATABASE_URL=sqlite+aiosqlite:///./fastapi.db
SECRET_KEY=your_super_secret_key_here
FIRST_SUPERUSER_EMAIL=[email protected]
FIRST_SUPERUSER_PASSWORD=your_strong_password_here
- Инициализируйте базу данных и выполните миграции:
alembic upgrade head
Если вы вносите изменения в модели и хотите создать новую миграцию, выполните:
alembic revision --autogenerate -m "Комментарий к миграции"
alembic upgrade head
- Запустите приложение:
uvicorn app.main:app --reload
После запуска приложение будет доступно по адресам:
Swagger UI: http://127.0.0.1:8000/docs
ReDoc: http://127.0.0.1:8000/redoc
Подробные варианты запросов и ошибок описаны в openapi.yml
.
Ниже приведены базовые примеры.
Логин (получение JWT):
POST /auth/jwt/login
Content-Type: application/x-www-form-urlencoded
[email protected]&password=secret
{
"access_token": "eyJ0eXAiOiJKV1QiLCJh...",
"token_type": "bearer"
}
Регистрация нового пользователя
POST /auth/register
Content-Type: application/json
{
"email": "[email protected]",
"password": "123456"
}
Получить все проекты:
GET /charity_project/
[
{
"name": "string",
"description": "string",
"full_amount": 500,
"id": 0,
"invested_amount": 0,
"fully_invested": true,
"create_date": "2019-08-24T14:15:22Z",
"close_date": "2019-08-24T14:15:22Z"
}
]
Создать проект (только суперпользователь):
POST /charity_project/
Authorization: Bearer <token>
Content-Type: application/json
Тело запроса:
{
"name": "string",
"description": "string",
"full_amount": 0
}
Тело ответа:
{
"name": "string",
"description": "string",
"full_amount": 0,
"id": 0,
"invested_amount": 0,
"fully_invested": true,
"create_date": "2019-08-24T14:15:22Z",
"close_date": "2019-08-24T14:15:22Z"
}
Сделать пожертвование:
POST /donation/
Authorization: Bearer <token>
Content-Type: application/json
Тело запроса:
{
"full_amount": 500,
"comment": "На корм котикам"
}
Тело ответа:
{
"full_amount": 500,
"comment": "На корм котикам",
"id": 0,
"create_date": "2019-08-24T14:15:22Z"
}
Посмотреть мои пожертвования:
GET /donation/my
Authorization: Bearer <token>
Тело ответа:
[
{
"full_amount": 500,
"comment": "На корм котикам",
"id": 1,
"create_date": "2025-09-07T10:05:00Z"
}
]
Валерий Абрамов
- GitHub: @abramov-v