Архитектура FastAPI приложения должна быть хорошо организована и структурирована, чтобы обеспечить эффективное и легкое управление кодом. В этом руководстве мы рассмотрим основные принципы и шаблоны для создания FastAPI приложения.
-
Структура проекта:
Прежде чем приступить к созданию приложения, важно определить его структуру. Рекомендуемая структура проекта для FastAPI приложения может выглядеть следующим образом:myapp/ |-- main.py |-- api/ | |-- __init__.py | |-- routers/ | |-- __init__.py | |-- router1.py | |-- router2.py |-- models/ | |-- __init__.py | |-- user.py |-- services/ | |-- __init__.py | |-- user_service.py |-- dependencies/ | |-- __init__.py | |-- database.py
- Главный файл приложения:
В главном файле (например,main.py
) необходимо создать экземпляр FastAPI приложения и подключить к нему все необходимые роутеры и зависимости.from fastapi import FastAPI from myapp.api.routers import router1, router2
app = FastAPI()
app.include_router(router1)
app.include_router(router2)
3. Маршрутизаторы:
Роутеры (routers) представляют собой маршруты для обработки запросов. Каждый роутер может быть организован в отдельном файле (например, `router1.py`).
```python
from fastapi import APIRouter
from myapp.services.user_service import UserService
router1 = APIRouter()
user_service = UserService()
@router1.get("/users/{user_id}")
async def get_user(user_id: int):
user = user_service.get_user(user_id)
return {"user": user}
- Модели:
Модели (models) используются для описания данных, с которыми работает приложение. Они могут быть организованы в отдельной директории (например,models/user.py
).from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
5. Сервисы:
Сервисы (services) содержат бизнес-логику приложения. Они могут использоваться для выполнения операций с данными и вызова методов моделей. Организуйте их в отдельной директории (например, `services/user_service.py`).
```python
from myapp.models.user import User
class UserService:
def get_user(self, user_id: int) -> User:
# Реализация получения пользователя из базы данных
pass
- Зависимости:
Зависимости (dependencies) используются для управления общими ресурсами приложения, например, базой данных. Они могут быть организованы в отдельной директории (например,dependencies/database.py
).from fastapi import Depends from myapp.dependencies.database import get_db
def get_user_service(db=Depends(get_db)):
return UserService(db)
7. Запуск приложения:
Для запуска FastAPI приложения, выполните следующую команду:
uvicorn main:app –reload
Это был краткий обзор основных принципов и шаблонов архитектуры FastAPI приложения. Пользуясь этим руководством, вы сможете эффективно создать структурированное и легко управляемое приложение на основе FastAPI.
Благодарю за видео, Тагир, уже прошел год с момента публикации видео, будет еще контент?
Хотел также предложить свою помощь (на безвозмездной основе), может смогу способствовать развитию канала.
Жду обратной связи)
Превосходно
Спасибо за краткое объяснение без лишней воды!
Я так понимаю вы применяете в своём подходе методологию чистой архитектуры?
можно писать просто from .routes import Route
. обозначит текущий каталог
что -то не получается, жалко нет requirements.txt… A, все, заработало. Спасибо! Супер видео, вернулся спустя время, очень в тему!
Благодарю, Отличное видео. Интересно было бы увидеть реализацию авторизации и регистрации через FastAPI-users или другую библиотеку👍
Ох ты тут намудрил а не проще было класический SOA?
Спасибо за урок. Прошел с удовольствием
Огромная просба продолжай плиз
Какое-то странное стремление всё сделать в ООП стиле, лишнее усложнени
Ужос
Какие главные сильные стороны у FastAPI?
Отличное видео! Как сделать себе такие же иконки в ВСе?)))))
Спасибо, отличный подход!
Класс, давно искал такой, формат
Мммм, что-то знакомое
Можно ссылку на оригинальный проект?
Для чего это морока с роутами? Есть какой то аргумент в пользу ооп здесь?
Интересно посмотреть на другие архитектуры но я обычно немного другую использую
Не много странно, что в описании не указана ссылка на такой шаблон, для более наглядного изучения вне видео. Спасибо за контент)
Можете создать репозиторий этого шаблона на гитхабе?
Спасибо. Отличное видео. Очень хочется увидеть полный проект, который максимально приближен к "боевым" проектам. и связка в базой, брокерами, обработчиками и тд…