/
olevok
/
python-dev-course
Обзор
Документация
Войти
/
olevok
/
python-dev-course
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Part 8 - FastAPI/L15/L15_2/main.py
159 строк
5 KB
PetrovSerega
Update L15
17 июн 2026, 17:09
17 июн 2026, 17:09
dc687cf
Код
Авторство
О чём код?
# uvicorn L15_2.main:app --reload # В VS Code комментарии с region + endregion используются для группировки кода # Свернуть все регионы и функции: Ctrl + K, затем Ctrl + 0 (ноль). # Развернуть все: Ctrl + K, затем Ctrl + J. from fastapi import FastAPI # region Создание экземпляра FastAPI(). Пример 1: Создание минимального приложения # main.py app = FastAPI( title="Моё первое API", description="Это учебный проект по изучению FastAPI", version="1.0.0", ) # endregion # region Создание экземпляра FastAPI(). Пример 2: Добавление базового маршрута # main.py (расскоментировать) @app.get("/") async def root(): return {"message": "Hello, FastAPI!"} # endregion # region Декораторы операций пути. Пример 1: Разные HTTP-методы # main.py (расскоментировать) @app.get("/items") async def list_items(): return [{"id": 1, "name": "Apple"}, {"id": 2, "name": "Banana"}] @app.post("/items") async def create_item(): return {"message": "Item created"} @app.delete("/items/{item_id}") async def delete_item(item_id: int): return {"message": f"Item {item_id} deleted"} # endregion # region Определение функций-обработчиков. Пример 1: Параметры пути и запроса # main.py (расскоментировать) @app.get("/users/{user_id}") async def get_user(user_id: int, active_only: bool = True): # user_id — обязательный параметр из URL (/users/5) # active_only — необязательный параметр из строки запроса (?active_only=false) return {"user_id": user_id, "active_only": active_only} # endregion # region Определение функций-обработчиков. Пример 2: Комбинация параметров пути и нескольких query-параметров # main.py (расскоментировать) @app.get("/products/{product_id}/reviews") async def get_reviews( product_id: int, # Из пути: обязательный sort: str = "date", # Query: необязательный (по умолчанию "date") limit: int = 10, # Query: необязательный (по умолчанию 10) ): return { "product_id": product_id, "sort": sort, "limit": limit, "message": f"Список отзывов для товара {product_id}", "reviews": [], # Заглушка для будущих данных } # endregion # region Path, Query, Body, Header, Cookie. Пример 1: from fastapi import FastAPI, Path, Query @app.get("/products/{product_id}/reviews2") async def get_reviews( product_id: int = Path(..., description="ID товара"), sort: str = Query("date", description="Сортировка (date, rating)"), limit: int = Query(10, ge=1, le=100, description="Максимум отзывов"), ): return { "product_id": product_id, "sort": sort, "limit": limit, "message": f"Список отзывов для товара {product_id}", "reviews2": [], # Заглушка } # endregion # region Path, Query, Body, Header, Cookie. Пример 2: Пример с Body, Header и Cookie from fastapi import FastAPI, Body, Header, Cookie @app.post("/secure_endpoint") async def secure_endpoint( # Тело запроса (JSON) payload: dict = Body( ..., description="JSON-объект с полями 'action' и 'data'", examples={"action": "update", "data": "value"}, ), # Заголовок Authorization (обязательный) authorization: str = Header( ..., description="Токен авторизации в формате 'Bearer <token>'", min_length=20 ), # Cookie session_id (необязательный) session_id: str | None = Cookie( None, description="Идентификатор сессии, если есть", examples="abc123xyz" ), ): return { "payload": payload, "auth_header": authorization, "session_cookie": session_id, "message": "Данные получены", } # endregion # region Возврат данных: автоматическая JSON-сериализация. Пример 1: Возврат разных типов данных # main.py (расскоментировать) @app.get("/text") async def get_text(): return "Hello, world!" @app.get("/number") async def get_number(): return 42 @app.get("/dict") async def get_dict(): return {"key": "value", "list": [1, 2, 3]} @app.get("/list") async def get_list(): return [{"id": 1}, {"id": 2}] # endregion