Aller au contenu

Données 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

Lorsque vous devez recevoir des champs de formulaire au lieu de JSON, vous pouvez utiliser Form.

Info

Pour utiliser les formulaires, installez d'abord python-multipart.

Assurez-vous de créer un environnement virtuel, de l'activer, puis d'installer ce paquet, par exemple :

$ pip install python-multipart

Importer Form

Importez Form depuis fastapi :

from typing import Annotated

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return {"username": username}
🤓 Other versions and variants
from typing import Annotated

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return {"username": username}

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

Définir les paramètres Form

Créez des paramètres de formulaire comme vous le feriez pour Body ou Query :

from typing import Annotated

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return {"username": username}
🤓 Other versions and variants
from typing import Annotated

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
    return {"username": username}

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

Tip

Prefer to use the Annotated version if possible.

from fastapi import FastAPI, Form

app = FastAPI()


@app.post("/login/")
async def login(username: str = Form(), password: str = Form()):
    return {"username": username}

Par exemple, dans l'une des manières dont la spécification OAuth2 peut être utilisée (appelée « password flow »), il est requis d'envoyer un username et un password comme champs de formulaire.

La spécification exige que les champs soient exactement nommés username et password, et qu'ils soient envoyés en tant que champs de formulaire, pas en JSON.

Avec Form, vous pouvez déclarer les mêmes configurations que pour Body (ainsi que Query, Path, Cookie), y compris la validation, des exemples, un alias (p. ex. user-name au lieu de username), etc.

Info

Form est une classe qui hérite directement de Body.

Astuce

Pour déclarer des corps de formulaire, vous devez utiliser Form explicitement, car sinon les paramètres seraient interprétés comme des paramètres de requête ou des paramètres de corps (JSON).

À propos des « champs de formulaire »

La manière dont les formulaires HTML (<form></form>) envoient les données au serveur utilise normalement un encodage « spécial » pour ces données, différent de JSON.

FastAPI s'assure de lire ces données au bon endroit au lieu de JSON.

Détails techniques

Les données issues des formulaires sont normalement encodées avec le « type de média » application/x-www-form-urlencoded.

Mais lorsque le formulaire inclut des fichiers, il est encodé en multipart/form-data. Vous lirez la gestion des fichiers dans le chapitre suivant.

Si vous voulez en savoir plus sur ces encodages et les champs de formulaire, consultez la MDN web docs pour POST.

Alertes

Vous pouvez déclarer plusieurs paramètres Form dans un chemin d'accès, mais vous ne pouvez pas aussi déclarer des champs Body que vous vous attendez à recevoir en JSON, car la requête aura le corps encodé en application/x-www-form-urlencoded au lieu de application/json.

Ce n'est pas une limitation de FastAPI, cela fait partie du protocole HTTP.

Récapitulatif

Utilisez Form pour déclarer les paramètres d'entrée des données de formulaire.