update readme 3
This commit is contained in:
165
README.md
165
README.md
@@ -1,99 +1,120 @@
|
|||||||
# sqlalchemy‑fastapi‑pydentic‑pytest
|
# sqlalchemy-fastapi-pydentic-pytest
|
||||||
|
|
||||||
пет‑проект для интеграции FastAPI, SQLAlchemy, Pydantic и Pytest.
|
Pet-проект на стеке **FastAPI + SQLAlchemy (async) + Pydantic + Pytest**.
|
||||||
|
Реализован CRUD для пользователей, JWT-аутентификация и тесты.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🔍 Описание
|
## 📂 Структура проекта
|
||||||
|
|
||||||
Проект демонстрирует, как:
|
|
||||||
|
|
||||||
- работать с **FastAPI**: REST API эндпоинты, маршруты, зависимости и схемы;
|
|
||||||
- использовать **SQLAlchemy** для работы с базой данных: модели, сессии, CRUD‑операции;
|
|
||||||
- валидировать данные через **Pydantic**;
|
|
||||||
- тестировать всё через **Pytest**: модульные и интеграционные тесты.
|
|
||||||
|
|
||||||
Цель — собрать всё вместе и понять best practices.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📁 Структура проекта
|
|
||||||
|
|
||||||
```text
|
|
||||||
/
|
/
|
||||||
├── server/
|
├── server/ # исходный код: модели, маршруты, JWT, базы данных
|
||||||
│ ├── … # код FastAPI + SQLAlchemy + модели, схемы и маршруты
|
├── run.py # точка входа, запуск приложения
|
||||||
├── run.py # точка входа
|
├── requirements.txt # зависимости
|
||||||
├── requirements # зависимости
|
├── .env # переменные окружения
|
||||||
├── README.md # этот файл
|
├── README.md # этот файл
|
||||||
├── .gitignore
|
└── Plan # заметки / TODO / планы по проекту
|
||||||
└── Plan # план/заметки по проекту
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## ⚙️ Установка и запуск
|
## ⚙️ Требования
|
||||||
|
|
||||||
```bash
|
- Python 3.13.3
|
||||||
# клонировать репозиторий
|
- SQLite (по умолчанию)
|
||||||
git clone <URL репо>
|
|
||||||
cd sqlalchemy-fastapi-pydentic-pytest
|
---
|
||||||
|
|
||||||
|
## 🚀 Установка и запуск
|
||||||
|
|
||||||
|
1. Клонировать репозиторий:
|
||||||
|
```bash
|
||||||
|
git clone <URL репозитория>
|
||||||
|
cd sqlalchemy-fastapi-pydentic-pytest
|
||||||
|
|
||||||
|
2. Создать и активировать виртуальное окружение:
|
||||||
|
|
||||||
# создать виртуальное окружение
|
|
||||||
python3 -m venv venv
|
python3 -m venv venv
|
||||||
source venv/bin/activate # в Linux/macOS
|
source venv/bin/activate # Linux / macOS
|
||||||
venv\Scripts\activate # в Windows
|
venv\Scripts\activate # Windows
|
||||||
|
|
||||||
# установить зависимости
|
|
||||||
pip install -r requirements
|
|
||||||
|
|
||||||
# запустить приложение
|
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
|
python run.py
|
||||||
|
|
||||||
# по умолчанию запустится FastAPI‑сервер (напр. localhost:8000)
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
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} — удалить пользователя
|
||||||
|
|
||||||
|
⸻
|
||||||
|
|
||||||
|
🧪 Тестирование
|
||||||
|
|
||||||
|
Запуск всех тестов:
|
||||||
|
|
||||||
```bash
|
|
||||||
# запустить все тесты
|
|
||||||
pytest
|
pytest
|
||||||
```
|
|
||||||
|
|
||||||
Описание тестов:
|
Тестируются:
|
||||||
|
• CRUD операции
|
||||||
|
• Pydantic-схемы
|
||||||
|
• Эндпоинты API
|
||||||
|
• JWT авторизация
|
||||||
|
|
||||||
- тесты на CRUD операции;
|
⸻
|
||||||
- тесты схем Pydantic;
|
|
||||||
- тесты ответов API (возможно с тестовым клиентом FastAPI).
|
|
||||||
|
|
||||||
---
|
✅ TODO
|
||||||
|
• Миграции через Alembic
|
||||||
|
• Обработка ошибок
|
||||||
|
• Логирование
|
||||||
|
• PostgreSQL + Pgpool-II для продакшена
|
||||||
|
• Разделение схем Pydantic на вход/выход
|
||||||
|
• Тестирование edge-cases
|
||||||
|
|
||||||
## 🛠 Используемые технологии
|
⸻
|
||||||
|
|
||||||
| Компонент | Версия / Пример использования |
|
📜 Лицензия
|
||||||
|-------------------|-------------------------------------|
|
|
||||||
| Python | ≥ 3.x |
|
|
||||||
| FastAPI | фреймворк для веб‑API |
|
|
||||||
| SQLAlchemy | ORM для работы с базой данных |
|
|
||||||
| Pydantic | валидация и сериализация данных |
|
|
||||||
| Pytest | тестирование |
|
|
||||||
|
|
||||||
---
|
Учебный проект.
|
||||||
|
|
||||||
## 🚧 Возможности для доработки / TODO
|
|
||||||
|
|
||||||
- добавление миграций (например, с Alembic);
|
|
||||||
- обработка ошибок и кастомные исключения;
|
|
||||||
- логирование;
|
|
||||||
- настройка CI/CD;
|
|
||||||
- защита маршрутов (аутентификация / авторизация);
|
|
||||||
- конфигурация через env‑переменные;
|
|
||||||
- более подробная документация API (например, OpenAPI схемы).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 📄 Лицензия
|
|
||||||
|
|
||||||
Этот проект учебный.
|
|
||||||
|
|||||||
Reference in New Issue
Block a user