Similar presentations:
FASTAPI Получение данных запроса в виде объекта класса
1.
FASTAPIПолучение данных запроса в виде объекта класса
2.
ВКРАТЦЕ О FASTAPI И КЛАССАХ• FastAPI — это фреймворк для создания лаконичных и довольно быстрых HTTP API-серверов со
встроенными валидацией, сериализацией и асинхронностью.
• Использование объектов классов для обработки данных запроса в FastAPI обеспечивает
структурированность и ясность кода. Это позволяет автоматически валидировать данные с помощью
Pydantic, упрощая обработку ошибок.
• Модели данных генерируют актуальную документацию API, а вложенные структуры облегчают
описание сложных объектов. Кроме того, такое решение улучшает поддержку и тестирование
кода.
3.
ЧТО ЖЕ КАСАЕТСЯ МОДЕЛЕЙМодель в FastAPI представляет собой своего рода схему или шаблон, который определяет
структуру данных, используемых в вашем приложении.
Основные задачи моделей:
• Валидация данных: Проверка соответствия данных ожидаемым форматом.
• Документирование данных: Автоматическое создание документации для API.
• Работа с базами данных: Описание структуры данных для взаимодействия с БД.
4.
ASGI СЕРВЕРЫUvicorn
• ASGI-сервер для запуска FastAPI и других
ASGI-приложений.
• Оптимизирован для высокой
производительности.
• Поддерживает HTTP/1.1 и WebSockets.
• Лёгкий и простой в использовании.
Hypercorn
• Также ASGI-сервер, но с поддержкой
HTTP/2.
• Подходит для более сложных сценариев
(например, HTTP/2).
• Менее популярен для FastAPI.
5.
УСТАНОВКА UVICORNУстановка Uvicorn происходит с помощью
менеджера pip, с помощью следующей
команды:
pip install uvicorn
6.
«ЗАГЛУШКА» КОДfrom fastapi import FastAPI
from fastapi.responses import
HTMLResponse
app = FastAPI()
@app.get("/")
def read_root():
html_content = "<h2>Hello World!</h2>"
return
HTMLResponse(content=html_content)
7.
ТЕСТОВЫЙ ЗАПУСК• ДЛЯ ЗАПУСКА КОДА, ПЕРЕЙДЕМ В ТЕРМИНАЛЕ К ПАПКЕ, ГДЕ
РАСПОЛАГАЕТ ФАЙЛ MAIN.PY И ЗАТЕМ ВЫПОЛНИМ КОМАНДУ:
uvicorn main:app --reload
В данном случае мы запускаем сервер uvicorn и передаем ему ряд параметров:
• main указывает на название модуля, которое по умолчанию совпадает с названием файла - main
• app указывает на объект приложения, созданный в строке app = FastAPI()
• --reload позволяет отслеживать изменения в файлах исходного кода и автоматически перезапускать проект
8.
ЛОГИРОВАНИЕ ЗАПРОСОВ• UVICORN ЛОГИРУЕТ ВСЕ ЗАПРОСЫ И ОТВЕТЫ
И ВЫВОДИТ ИХ В ТЕРМИНАЛ
9.
ПОЛУЧЕНИЕ ДАННЫХ ЗАПРОСАfrom fastapi import FastAPI, Body
from fastapi.responses import FileResponse
app = FastAPI()
@app.get("/")
def root():
return FileResponse("main/public/index.html")
@app.post("/hello")
def hello(data = Body()):
name = data["name"]
age = data["age"]
return {"message": f"{name}, your age - {age}"}
10.
ПРЕОБРАЗОВАНИЕ ДАННЫХ В ОБЪЕКТ КЛАССАfrom fastapi import FastAPI
from fastapi.responses import FileResponse
from pydantic import BaseModel
class Person(BaseModel):
name: str
age: int
app = FastAPI()
@app.get("/")
def root():
return FileResponse("main/public/index.html")
@app.post("/hello")
def hello(person: Person):
return {"message": f"Hello, {person.name}, your age - {person.age}"}
11.
ДЕТАЛЬНАЯ НАСТРОЙКА АТРИБУТОВ И КЛАСС FIELD• default: устанавливает значение по умолчанию
• min_length: устанавливает минимальное количество символов в значении параметра
• max_length: устанавливает максимальное количество символов в значении параметра
• pattern: устанавливает регулярное выражение, которому должно соответствовать значение
параметра
• lt: значение параметра должно быть меньше определенного значения
• le: значение параметра должно быть меньше или равно определенному значению
• gt: значение параметра должно быть больше определенного значения
• ge: значение параметра должно быть больше или равно определенному значению
12.
ДЕТАЛЬНАЯ НАСТРОЙКА АТРИБУТОВ И КЛАСС FIELDПРИМЕР
from fastapi import FastAPI
from fastapi.responses import FileResponse
from pydantic import BaseModel, Field
class Person(BaseModel):
name: str = Field(default="Undefined", min_length=3, max_length=20)
age: int= Field(default=18, ge=18, lt=111)
app = FastAPI()
@app.get("/")
def root():
return FileResponse("main/public/index.html")
@app.post("/hello")
def hello(person: Person):
return {"message": f"Hello, {person.name}, your age {person.age}"}
13.
ВЛОЖЕННЫЕ МОДЕЛИfrom fastapi import FastAPI
from fastapi.responses import FileResponse
from pydantic import BaseModel
class Company(BaseModel):
name: str
class Person(BaseModel):
name: str
company: Company
app = FastAPI()
@app.get("/")
def root():
return FileResponse("main/public/index.html")
@app.post("/hello")
def hello(person: Person):
return {"message": f"{person.name} ({person.company.name})"}
14.
РАБОТА С PATH PARAMETERSfrom fastapi import FastAPI, Path
from fastapi.responses import FileResponse
from pydantic import BaseModel
app = FastAPI()
class Person(BaseModel):
name: str
@app.get("/")
def root():
return FileResponse("main/public/index.html")
@app.get("/hello/{name}")
def hello_name(name: str = Path(...)):
person = Person(name=name)
return {"message": f"Hello, {person.name}!"}
15.
ПОДВЕДЕНИЕ ИТОГОВ• Удобство работы с данными: FastAPI упрощает процесс получения и обработки данных
запросов, позволяя разработчикам легко работать с входной информацией.
• Валидация на уровне модели: Использование Pydantic для определения моделей обеспечивает
автоматическую валидацию данных, что снижает вероятность ошибок и улучшает качество
входящих данных.
• Автоматическая документация: FastAPI генерирует подробную документацию API, что
облегчает взаимодействие с разработчиками и пользователями, а также упрощает тестирование.
• Эффективность и производительность: FastAPI обеспечивает высокую производительность
благодаря асинхронной обработке запросов и оптимизированной работе с данными, что делает
его отличным выбором для современных веб-приложений.
programming