Aller au contenu

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.

Version anglaise

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: Rick
  • password: Portal Gun
  • extra: 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. 😎