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

from fastapi import FastAPI, Form

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

VergleichspunktJSON-AnfragekörperFormulardaten
Content-Typeapplication/jsonapplication/x-www-form-urlencoded
DeklarationsmethodePydantic BaseModelForm()
DatenstrukturenUnterstützt verschachtelte Objekte und ArraysFlache Schlüssel-Wert-Paare
Anwendbare SzenarienAPI-Schnittstelle (Trennung von Frontend und Backend)HTML-Formularübermittlung

Formulardaten werden als "Felder" gesendet, nicht als JSON. Daher können Sie nichtFormParameter 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

from fastapi import FastAPI, Form

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

<form action="http://localhost:8000/items/" method="post">
    <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

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