Modèles de formulaire¶
🌐 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.
Vous pouvez utiliser des modèles Pydantic pour déclarer des champs de formulaire dans FastAPI.
Info
Pour utiliser les formulaires, installez d'abord python-multipart.
Assurez-vous de créer un environnement virtuel, de l'activer, puis d'installer le paquet, par exemple :
$ pip install python-multipart
Remarque
Ceci est pris en charge depuis la version 0.113.0 de FastAPI. 🤓
Modèles Pydantic pour les formulaires¶
Vous avez simplement besoin de déclarer un modèle Pydantic avec les champs que vous souhaitez recevoir comme champs de formulaire, puis de déclarer le paramètre comme Form :
from typing import Annotated
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
return data
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
@app.post("/login/")
async def login(data: FormData = Form()):
return data
FastAPI va extraire les données pour chaque champ à partir des données de formulaire de la requête et vous fournir le modèle Pydantic que vous avez défini.
Consulter les documents¶
Vous pouvez le vérifier dans l'interface des documents à /docs :
Interdire les champs de formulaire supplémentaires¶
Dans certains cas d'utilisation particuliers (probablement peu courants), vous pourriez vouloir restreindre les champs de formulaire à ceux déclarés dans le modèle Pydantic, et interdire tout champ supplémentaire.
Remarque
Ceci est pris en charge depuis la version 0.114.0 de FastAPI. 🤓
Vous pouvez utiliser la configuration du modèle Pydantic pour forbid tout champ extra :
from typing import Annotated
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
model_config = {"extra": "forbid"}
@app.post("/login/")
async def login(data: Annotated[FormData, Form()]):
return data
🤓 Other versions and variants
Tip
Prefer to use the Annotated version if possible.
from fastapi import FastAPI, Form
from pydantic import BaseModel
app = FastAPI()
class FormData(BaseModel):
username: str
password: str
model_config = {"extra": "forbid"}
@app.post("/login/")
async def login(data: FormData = Form()):
return data
Si un client tente d'envoyer des données supplémentaires, il recevra une réponse d'erreur.
Par exemple, si le client essaie d'envoyer les champs de formulaire :
username:Rickpassword:Portal Gunextra:Mr. Poopybutthole
Il recevra une réponse d'erreur lui indiquant que le champ extra n'est pas autorisé :
{
"detail": [
{
"type": "extra_forbidden",
"loc": ["body", "extra"],
"msg": "Extra inputs are not permitted",
"input": "Mr. Poopybutthole"
}
]
}
Résumer¶
Vous pouvez utiliser des modèles Pydantic pour déclarer des champs de formulaire dans FastAPI. 😎