Corps - Champs¶
🌐 Traduction par IA et humains
Cette traduction a été réalisée par une IA guidée par des humains. 🤝
Elle peut contenir des erreurs d'interprétation du sens original, ou paraître peu naturelle, etc. 🤖
Vous pouvez améliorer cette traduction en nous aidant à mieux guider le LLM d'IA.
De la même manière que vous pouvez déclarer des validations supplémentaires et des métadonnées dans les paramètres d'une fonction de chemin d'accès avec Query, Path et Body, vous pouvez déclarer des validations et des métadonnées à l'intérieur des modèles Pydantic en utilisant Field de Pydantic.
Importer Field¶
D'abord, vous devez l'importer :
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
Alertes
Notez que Field est importé directement depuis pydantic, et non depuis fastapi comme le sont les autres (Query, Path, Body, etc.).
Déclarer les attributs du modèle¶
Vous pouvez ensuite utiliser Field avec des attributs de modèle :
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 fonctionne de la même manière que Query, Path et Body, il dispose des mêmes paramètres, etc.
Détails techniques
En réalité, Query, Path et d'autres que vous verrez ensuite créent des objets de sous-classes d'une classe commune Param, qui est elle-même une sous-classe de la classe FieldInfo de Pydantic.
Et Field de Pydantic renvoie également une instance de FieldInfo.
Body renvoie aussi directement des objets d'une sous-classe de FieldInfo. Et il y en a d'autres que vous verrez plus tard qui sont des sous-classes de la classe Body.
Rappelez-vous que lorsque vous importez Query, Path et d'autres depuis fastapi, ce sont en réalité des fonctions qui renvoient des classes spéciales.
Astuce
Remarquez comment chaque attribut de modèle avec un type, une valeur par défaut et Field a la même structure qu'un paramètre de fonction de chemin d'accès, avec Field au lieu de Path, Query et Body.
Ajouter des informations supplémentaires¶
Vous pouvez déclarer des informations supplémentaires dans Field, Query, Body, etc. Elles seront incluses dans le JSON Schema généré.
Vous en apprendrez davantage sur l'ajout d'informations supplémentaires plus loin dans les documents, lorsque vous apprendrez à déclarer des exemples.
Alertes
Les clés supplémentaires passées à Field seront également présentes dans le schéma OpenAPI résultant pour votre application.
Comme ces clés ne font pas nécessairement partie de la spécification OpenAPI, certains outils OpenAPI, par exemple le validateur OpenAPI, peuvent ne pas fonctionner avec votre schéma généré.
Récapitulatif¶
Vous pouvez utiliser Field de Pydantic pour déclarer des validations supplémentaires et des métadonnées pour les attributs de modèle.
Vous pouvez également utiliser des arguments nommés supplémentaires pour transmettre des métadonnées JSON Schema additionnelles.