121 lines
3.1 KiB
Markdown
121 lines
3.1 KiB
Markdown
# sqlalchemy-fastapi-pydentic-pytest
|
|
|
|
Pet-проект на стеке **FastAPI + SQLAlchemy (async) + Pydantic + Pytest**.
|
|
Реализован CRUD для пользователей, JWT-аутентификация и тесты.
|
|
|
|
---
|
|
|
|
## 📂 Структура проекта
|
|
```
|
|
/
|
|
├── server/ # исходный код: модели, маршруты, JWT, базы данных
|
|
├── run.py # точка входа, запуск приложения
|
|
├── requirements.txt # зависимости
|
|
├── .env # переменные окружения
|
|
├── README.md # этот файл
|
|
└── Plan # заметки / TODO / планы по проекту
|
|
```
|
|
---
|
|
|
|
## ⚙️ Требования
|
|
|
|
- Python 3.13.3
|
|
- SQLite (по умолчанию)
|
|
|
|
---
|
|
|
|
## 🚀 Установка и запуск
|
|
|
|
1. Клонировать репозиторий:
|
|
```bash
|
|
git clone <URL репозитория>
|
|
cd sqlalchemy-fastapi-pydentic-pytest
|
|
|
|
2. Создать и активировать виртуальное окружение:
|
|
|
|
python3 -m venv venv
|
|
source venv/bin/activate # Linux / macOS
|
|
venv\Scripts\activate # Windows
|
|
|
|
|
|
3. Установить зависимости:
|
|
|
|
pip install -r requirements.txt
|
|
|
|
|
|
4. Настроить .env файл (пример):
|
|
```
|
|
ALLOW_ORIGINS=http://localhost:3000
|
|
ALLOW_CREDENTIALS=true
|
|
ALLOW_METHODS=GET,POST,PUT,DELETE
|
|
ALLOW_HEADERS=*
|
|
JWT_SECRET_KEY=your_secret_key
|
|
ACCESS_TOKEN_EXPIRE_MINUTES=30
|
|
```
|
|
|
|
5. Запустить приложение:
|
|
|
|
python run.py
|
|
|
|
|
|
6. Документация OpenAPI будет доступна по адресу:
|
|
• Swagger UI → http://localhost:8000/docs
|
|
• JSON схема → http://localhost:8000/openapi.json
|
|
|
|
⸻
|
|
|
|
🔐 Аутентификация
|
|
• Эндпоинт /login принимает application/x-www-form-urlencoded:
|
|
|
|
username=<email>&password=<пароль>
|
|
|
|
|
|
• Возвращает JWT токен:
|
|
|
|
{
|
|
"access_token": "...",
|
|
"token_type": "bearer"
|
|
}
|
|
|
|
|
|
• Пример защищённого эндпоинта: /protected.
|
|
|
|
⸻
|
|
|
|
👤 Пользователи (CRUD)
|
|
• POST /user_create — создать пользователя
|
|
• GET /get_user_by_email/{email} — получить пользователя по email
|
|
• GET / — получить всех пользователей
|
|
• PUT /user_update/{email} — обновить данные пользователя
|
|
• DELETE /user_delete/{email} — удалить пользователя
|
|
|
|
⸻
|
|
|
|
🧪 Тестирование
|
|
|
|
Запуск всех тестов:
|
|
|
|
pytest
|
|
|
|
Тестируются:
|
|
• CRUD операции
|
|
• Pydantic-схемы
|
|
• Эндпоинты API
|
|
• JWT авторизация
|
|
|
|
⸻
|
|
|
|
✅ TODO
|
|
• Миграции через Alembic
|
|
• Обработка ошибок
|
|
• Логирование
|
|
• PostgreSQL + Pgpool-II для продакшена
|
|
• Разделение схем Pydantic на вход/выход
|
|
• Тестирование edge-cases
|
|
|
|
⸻
|
|
|
|
📜 Лицензия
|
|
|
|
Учебный проект.
|