FastAPI использует Pydantic для определения схем данных, которые могут использоваться для валидации данных и сериализации в JSON. Схемы данных определяются с помощью классов, которые наследуются от BaseModel из Pydantic.
Пример определения схемы данных:
from pydantic import BaseModel
class User(BaseModel):
id: int
name: str
email: str
В этом примере мы определяем схему данных для пользователя. Схема данных имеет три поля: id, name и email. Все поля являются обязательными.
Валидация данных
FastAPI использует схемы данных Pydantic для автоматической валидации входных данных. Если данные не соответствуют схеме данных, FastAPI вернет ошибку 422 Unprocessable Entity.
Пример валидации данных:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
id: int
name: str
email: str
@app.post("/users/")
async def create_user(user: User):
return user
В этом примере мы определяем операцию create_user, которая принимает объект User в качестве аргумента. FastAPI автоматически проверяет входные данные на соответствие схеме данных User и генерирует ошибку 422 Unprocessable Entity в случае несоответствия.
Сериализация данных
FastAPI использует схемы данных Pydantic для автоматической сериализации данных в JSON-формат. Модель данных, определенная с помощью Pydantic, может быть преобразована в словарь, который может быть легко сериализован в JSON.
Пример использования Pydantic для сериализации данных:
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
item = Item(name="Item", price=10.0)
item_dict = item.dict()
В этом примере мы создаем объект Item и преобразуем его в словарь. Затем мы можем легко сериализовать словарь в JSON.
import json
json_item = json.dumps(item_dict)
Мы используем функцию json.dumps() для сериализации словаря в JSON.
Валидация параметров запроса
FastAPI позволяет использовать схемы данных Pydantic для валидации параметров запроса. Модели данных могут использоваться для проверки типов параметров запроса и их значений.
Пример использования схемы данных Pydantic для валидации параметров запроса:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
id: int
name: str
email: str
@app.get("/users/{user_id}")
async def read_user(user_id: int, q: str = None):
return {"user_id": user_id, "q": q}
В этом примере мы определяем операцию read_user, которая принимает параметр user_id типа int и параметр q типа str. Параметр q является опциональным, поэтому мы устанавливаем его значение по умолчанию в None. FastAPI автоматически проверяет типы параметров запроса и генерирует ошибку 422 Unprocessable Entity в случае несоответствия.
Валидация тела запроса
FastAPI также позволяет использовать схемы данных Pydantic для валидации тела запроса. Модели данных могут использоваться для проверки типов и значений данных, отправляемых в запросе. Пример использования схемы данных Pydantic для валидации тела запроса:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
async def create_item(item: Item):
return item
В этом примере мы определяем операцию create_item, которая принимает объект Item в качестве тела запроса. FastAPI автоматически проверяет тело запроса на соответствие схеме данных Item и генерирует ошибку 422 Unprocessable Entity в случае несоответствия.
Валидация заголовков запроса
FastAPI позволяет использовать схемы данных Pydantic для валидации заголовков запроса. Модели данных могут использоваться для проверки типов и значений заголовков запроса.
Пример использования схемы данных Pydantic для валидации заголовков запроса:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
id: int
name: str
email: str
@app.get("/users/")
async def read_user(user_agent: str = Header(None)):
return {"User-Agent": user_agent}
В этом примере мы определяем операцию read_user, которая принимает заголовок User-Agent в качестве параметра user_agent. FastAPI автоматически проверяет типы и значения заголовков запроса и генерирует ошибку 422 Unprocessable Entity в случае несоответствия.