123 lines
3.3 KiB
Markdown
123 lines
3.3 KiB
Markdown
# sqlalchemy-fastapi-pydentic-pytest
|
||
|
||
Pet-проект на стеке **FastAPI + SQLAlchemy (async) + Pydantic + Pytest**.
|
||
Реализован CRUD для пользователей, JWT-аутентификация и тесты.
|
||
|
||
---
|
||
|
||
## 📂 Структура проекта
|
||
```
|
||
/
|
||
├── server/backend # Исходный код: endpoints, pydantic, JWT, отправка паролей на почту, permissions, rate-limiting
|
||
├── server/frontend # Странички login, registration, reset-password, main
|
||
├── server/database # База данных, alembic, db_balancer(не настроен, как шаблон)
|
||
├── server/testing # pytests
|
||
├── run.py # Точка входа, запуск приложения
|
||
├── makefile # Точка входа, запуск приложения и утилит
|
||
├── requirements.txt # Зависимости
|
||
├── .env # Переменные окружения
|
||
└── README.md # Этот файл
|
||
|
||
```
|
||
---
|
||
|
||
## ⚙️ Требования
|
||
|
||
- 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. Мигрировать БД:
|
||
```
|
||
make migrate_head
|
||
```
|
||
6. Запустить приложение:
|
||
```
|
||
python run.py или вне окружения сразу прописать make run
|
||
```
|
||
|
||
7. Документация 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"
|
||
}
|
||
```
|
||
⸻
|
||
```
|
||
👤 Пользователи (CRUD)
|
||
• POST /user_create — создать пользователя
|
||
• GET /get_user_by_email/{email} — получить пользователя по email
|
||
• GET / — получить всех пользователей
|
||
• PUT /user_update/{email} — обновить данные пользователя
|
||
• DELETE /user_delete/{email} — удалить пользователя
|
||
```
|
||
⸻
|
||
|
||
🧪 Тестирование
|
||
|
||
Запуск всех тестов:
|
||
```
|
||
make test
|
||
```
|
||
Тестируются (В планах):
|
||
```
|
||
• CRUD операции
|
||
• Pydantic-схемы
|
||
• Эндпоинты API
|
||
• JWT авторизация
|
||
```
|
||
⸻
|
||
|
||
✅ TODO
|
||
```
|
||
• Тестирование edge-cases
|
||
```
|
||
⸻
|
||
|
||
📜 Лицензия
|
||
|
||
Учебный проект.
|