FastAPI-Formulardaten
Wenn ein Client Daten über ein HTML-Formular sendet (application/x-www-form-urlencoded) Beim Übermitteln von Daten müssen Sie verwendenFormum Formularfelder zu empfangen, anstelle vonBaseModel。
python-multipart installieren
Bevor Sie die Formularfunktionalität verwenden, müssen Sie installierenpython-multipart:
pip install python-multipart
Formulardaten empfangen
NutzungFormFormularfelder deklarieren
Beispiel
app = FastAPI()
@app.post("/login/")
async def login(
username: str = Form(), # Erforderliche Formularfelder
password: str = Form(), # Erforderliche Formularfelder
):
return {"username": username}

Unterschied zwischen Formularfeldern und JSON-Anfragekörper
| Vergleichspunkt | JSON-Anfragekörper | Formulardaten |
|---|---|---|
| Content-Type | application/json | application/x-www-form-urlencoded |
| Deklarationsmethode | Pydantic BaseModel | Form() |
| Datenstrukturen | Unterstützt verschachtelte Objekte und Arrays | Flache Schlüssel-Wert-Paare |
| Anwendbare Szenarien | API-Schnittstelle (Trennung von Frontend und Backend) | HTML-Formularübermittlung |
Formulardaten werden als "Felder" gesendet, nicht als JSON. Daher können Sie nicht
FormParameter als Pydantic-Modelle deklarieren. Formularfelder und JSON-Request-Body können nicht zusammen in derselben Route verwendet werden.
Optionale Formularfelder
Ähnlich wie Query-Parameter sind Formularfelder mit Standardwerten optional:
Beispiel
app = FastAPI()
@app.post("/items/")
async def create_item(
name: str = Form(...), # Erforderlich
description: str | None = Form(None), # Optional, Standardwert None
price: float = Form(..., gt=0), # Erforderlich, muss größer als 0 sein
):
return {"name": name, "description": description, "price": price}

Test mit HTML-Formularen
Sie können eine HTML-Seite erstellen, um das Absenden eines Formulars zu testen:
Beispiel
<label for="name">Name:</label>
<input type="text" id="name" name="name" required>
<br>
<label for="description">Beschreibung:</label>
<textarea id="description" name="description"></textarea>
<br>
<label for="price">Preis:</label>
<input type="number" id="price" name="price" required min="0">
<br>
<button type="submit">Absenden</button>
</Form>
Validierung und Dokumentation von Formulardaten
NutzungFormFür die deklarierten Felder führt FastAPI automatisch eine Datenvalidierung durch und zeigt sie in der API-Dokumentation an:


Zusammenfassung
- Nutzung
FormEmpfangen von Daten, die über ein HTML-Formular übermittelt werden - Formulardaten sind kein JSON und können nicht mit ... verwendet werden
BaseModelMischen von Request-Body Form()Deklarieren erforderlicher FelderForm(None)Deklarieren optionaler Felder- Erfordert Installation
python-multipartPaket - Formularfelder unterstützen dieselben Validierungsregeln wie Query-Parameter (
min_length、gtusw.)