fastapi/docs/de/docs/tutorial/request-forms.md

3.7 KiB
Raw Blame History

Formulardaten

Wenn Sie Felder aus Formularen statt JSON empfangen müssen, können Sie Form verwenden.

!!! info Um Formulare zu verwenden, installieren Sie zuerst python-multipart.

Z. B. `pip install python-multipart`.

Form importieren

Importieren Sie Form von fastapi:

=== "Python 3.9+"

```Python hl_lines="3"
{!> ../../../docs_src/request_forms/tutorial001_an_py39.py!}
```

=== "Python 3.8+"

```Python hl_lines="1"
{!> ../../../docs_src/request_forms/tutorial001_an.py!}
```

=== "Python 3.8+ nicht annotiert"

!!! tip "Tipp"
    Bevorzugen Sie die `Annotated`-Version, falls möglich.

```Python hl_lines="1"
{!> ../../../docs_src/request_forms/tutorial001.py!}
```

Form-Parameter definieren

Erstellen Sie Formular-Parameter, so wie Sie es auch mit Body und Query machen würden:

=== "Python 3.9+"

```Python hl_lines="9"
{!> ../../../docs_src/request_forms/tutorial001_an_py39.py!}
```

=== "Python 3.8+"

```Python hl_lines="8"
{!> ../../../docs_src/request_forms/tutorial001_an.py!}
```

=== "Python 3.8+ nicht annotiert"

!!! tip "Tipp"
    Bevorzugen Sie die `Annotated`-Version, falls möglich.

```Python hl_lines="7"
{!> ../../../docs_src/request_forms/tutorial001.py!}
```

Zum Beispiel stellt eine der Möglichkeiten, die OAuth2 Spezifikation zu verwenden (genannt „password flow“), die Bedingung, einen username und ein password als Formularfelder zu senden.

Die Spec erfordert, dass die Felder exakt username und password genannt werden und als Formularfelder, nicht JSON, gesendet werden.

Mit Form haben Sie die gleichen Konfigurationsmöglichkeiten wie mit Body (und Query, Path, Cookie), inklusive Validierung, Beispielen, einem Alias (z. B. user-name statt username), usw.

!!! info Form ist eine Klasse, die direkt von Body erbt.

!!! tip "Tipp" Um Formularbodys zu deklarieren, verwenden Sie explizit Form, da diese Parameter sonst als Query-Parameter oder Body(-JSON)-Parameter interpretiert werden würden.

Über „Formularfelder“

HTML-Formulare (<form></form>) senden die Daten in einer „speziellen“ Kodierung zum Server, welche sich von JSON unterscheidet.

FastAPI stellt sicher, dass diese Daten korrekt ausgelesen werden, statt JSON zu erwarten.

!!! note "Technische Details" Daten aus Formularen werden normalerweise mit dem „media type“ application/x-www-form-urlencoded kodiert.

Wenn das Formular stattdessen Dateien enthält, werden diese mit `multipart/form-data` kodiert. Im nächsten Kapitel erfahren Sie mehr über die Handhabung von Dateien.

Wenn Sie mehr über Formularfelder und ihre Kodierungen lesen möchten, besuchen Sie die <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network  Mozilla-Entwickler-Netzwerk">MDN</abbr>-Webdokumentation für <code>POST</code></a>.

!!! warning "Achtung" Sie können mehrere Form-Parameter in einer Pfadoperation deklarieren, aber Sie können nicht gleichzeitig auch Body-Felder deklarieren, welche Sie als JSON erwarten, da der Request den Body mittels application/x-www-form-urlencoded statt application/json kodiert.

Das ist keine Limitation von **FastAPI**, sondern Teil des HTTP-Protokolls.

Zusammenfassung

Verwenden Sie Form, um Eingabe-Parameter für Formulardaten zu deklarieren.