Тіло - Поля¶
AI coding agents
Use the official FastAPI skill for your installed version. Install it from your project directory:
uvx library-skills
See Develop with AI.
🌐 Переклад ШІ та людьми
Цей переклад виконано ШІ під керівництвом людей. 🤝
Можливі помилки через неправильне розуміння початкового змісту або неприродні формулювання тощо. 🤖
Ви можете покращити цей переклад, допомігши нам краще спрямовувати AI LLM.
Так само як ви можете оголошувати додаткову валідацію та метадані в параметрах функції операції шляху за допомогою Query, Path та Body, ви можете оголошувати валідацію та метадані всередині моделей Pydantic, використовуючи Field від Pydantic.
Імпорт Field¶
Спочатку вам потрібно імпортувати це:
from typing import Annotated
from fastapi import Body, FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = Field(
default=None, title="The description of the item", max_length=300
)
price: float = Field(gt=0, description="The price must be greater than zero")
tax: float | None = None
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Annotated[Item, Body(embed=True)]):
results = {"item_id": item_id, "item": item}
return results
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import Body, FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = Field(
default=None, title="The description of the item", max_length=300
)
price: float = Field(gt=0, description="The price must be greater than zero")
tax: float | None = None
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item = Body(embed=True)):
results = {"item_id": item_id, "item": item}
return results
Попередження
Зверніть увагу, що Field імпортується безпосередньо з pydantic, а не з fastapi, як усе інше (Query, Path, Body тощо).
Оголошення атрибутів моделі¶
Потім ви можете використовувати Field з атрибутами моделі:
from typing import Annotated
from fastapi import Body, FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = Field(
default=None, title="The description of the item", max_length=300
)
price: float = Field(gt=0, description="The price must be greater than zero")
tax: float | None = None
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Annotated[Item, Body(embed=True)]):
results = {"item_id": item_id, "item": item}
return results
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import Body, FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = Field(
default=None, title="The description of the item", max_length=300
)
price: float = Field(gt=0, description="The price must be greater than zero")
tax: float | None = None
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item = Body(embed=True)):
results = {"item_id": item_id, "item": item}
return results
Field працює так само, як Query, Path і Body, має ті самі параметри тощо.
Технічні деталі
Насправді Query, Path та інші, які ви побачите далі, створюють об'єкти підкласів спільного класу Param, який сам є підкласом класу FieldInfo з Pydantic.
І Field від Pydantic також повертає екземпляр FieldInfo.
Body також безпосередньо повертає об'єкти підкласу FieldInfo. І є інші, які ви побачите пізніше, що є підкласами класу Body.
Пам'ятайте, що коли ви імпортуєте Query, Path та інші з fastapi, це фактично функції, які повертають спеціальні класи.
Порада
Зверніть увагу, що кожен атрибут моделі з типом, значенням за замовчуванням і Field має ту саму структуру, що й параметр функції операції шляху, з Field замість Path, Query і Body.
Додавання додаткової інформації¶
Ви можете оголошувати додаткову інформацію за допомогою json_schema_extra в Field, Query, Body тощо. І вона буде включена до згенерованої Схеми JSON.
Ви дізнаєтеся більше про додавання додаткової інформації пізніше в документації, коли вивчатимете, як оголошувати приклади.
Попередження
Додаткові ключі, передані в json_schema_extra, також будуть присутні в отриманій схемі OpenAPI для вашого застосунку.
Оскільки ці ключі не обов'язково є частиною специфікації OpenAPI, деякі інструменти OpenAPI, наприклад валідатор OpenAPI, можуть не працювати з вашою згенерованою схемою.
Підсумок¶
Ви можете використовувати Field від Pydantic, щоб оголошувати додаткову валідацію та метадані для атрибутів моделі.
Ви також можете використовувати json_schema_extra, щоб передавати додаткові метадані Схеми JSON.