mirror of https://github.com/tiangolo/fastapi.git
🌐 Add German translation for `docs/de/docs/tutorial/query-params.md` (#10293)
This commit is contained in:
parent
9af7f2a5d5
commit
e55c7ccbcb
|
|
@ -0,0 +1,226 @@
|
||||||
|
# Query-Parameter
|
||||||
|
|
||||||
|
Wenn Sie in ihrer Funktion Parameter deklarieren, die nicht Teil der Pfad-Parameter sind, dann werden diese automatisch als „Query“-Parameter interpretiert.
|
||||||
|
|
||||||
|
```Python hl_lines="9"
|
||||||
|
{!../../../docs_src/query_params/tutorial001.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
Query-Parameter (Deutsch: Abfrage-Parameter) sind die Schlüssel-Wert-Paare, die nach dem `?` in einer URL aufgelistet sind, getrennt durch `&`-Zeichen.
|
||||||
|
|
||||||
|
Zum Beispiel sind in der URL:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/?skip=0&limit=10
|
||||||
|
```
|
||||||
|
|
||||||
|
... die Query-Parameter:
|
||||||
|
|
||||||
|
* `skip`: mit dem Wert `0`
|
||||||
|
* `limit`: mit dem Wert `10`
|
||||||
|
|
||||||
|
Da sie Teil der URL sind, sind sie „naturgemäß“ Strings.
|
||||||
|
|
||||||
|
Aber wenn Sie sie mit Python-Typen deklarieren (im obigen Beispiel als `int`), werden sie zu diesem Typ konvertiert, und gegen diesen validiert.
|
||||||
|
|
||||||
|
Die gleichen Prozesse, die für Pfad-Parameter stattfinden, werden auch auf Query-Parameter angewendet:
|
||||||
|
|
||||||
|
* Editor Unterstützung (natürlich)
|
||||||
|
* <abbr title="Konvertieren des Strings, der von einer HTTP-Anfrage kommt, in Python-Daten">„Parsen“</abbr> der Daten
|
||||||
|
* Datenvalidierung
|
||||||
|
* Automatische Dokumentation
|
||||||
|
|
||||||
|
## Defaultwerte
|
||||||
|
|
||||||
|
Da Query-Parameter nicht ein festgelegter Teil des Pfades sind, können sie optional sein und Defaultwerte haben.
|
||||||
|
|
||||||
|
Im obigen Beispiel haben sie die Defaultwerte `skip=0` und `limit=10`.
|
||||||
|
|
||||||
|
Wenn Sie also zur URL:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/
|
||||||
|
```
|
||||||
|
|
||||||
|
gehen, so ist das das gleiche wie die URL:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/?skip=0&limit=10
|
||||||
|
```
|
||||||
|
|
||||||
|
Aber wenn Sie zum Beispiel zu:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/?skip=20
|
||||||
|
```
|
||||||
|
|
||||||
|
gehen, werden die Parameter-Werte Ihrer Funktion sein:
|
||||||
|
|
||||||
|
* `skip=20`: da Sie das in der URL gesetzt haben
|
||||||
|
* `limit=10`: weil das der Defaultwert ist
|
||||||
|
|
||||||
|
## Optionale Parameter
|
||||||
|
|
||||||
|
Auf die gleiche Weise können Sie optionale Query-Parameter deklarieren, indem Sie deren Defaultwert auf `None` setzen:
|
||||||
|
|
||||||
|
=== "Python 3.10+"
|
||||||
|
|
||||||
|
```Python hl_lines="7"
|
||||||
|
{!> ../../../docs_src/query_params/tutorial002_py310.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python 3.8+"
|
||||||
|
|
||||||
|
```Python hl_lines="9"
|
||||||
|
{!> ../../../docs_src/query_params/tutorial002.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
In diesem Fall wird der Funktionsparameter `q` optional, und standardmäßig `None` sein.
|
||||||
|
|
||||||
|
!!! check
|
||||||
|
Beachten Sie auch, dass **FastAPI** intelligent genug ist, um zu erkennen, dass `item_id` ein Pfad-Parameter ist und `q` keiner, daher muss letzteres ein Query-Parameter sein.
|
||||||
|
|
||||||
|
## Query-Parameter Typkonvertierung
|
||||||
|
|
||||||
|
Sie können auch `bool`-Typen deklarieren und sie werden konvertiert:
|
||||||
|
|
||||||
|
=== "Python 3.10+"
|
||||||
|
|
||||||
|
```Python hl_lines="7"
|
||||||
|
{!> ../../../docs_src/query_params/tutorial003_py310.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python 3.8+"
|
||||||
|
|
||||||
|
```Python hl_lines="9"
|
||||||
|
{!> ../../../docs_src/query_params/tutorial003.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
Wenn Sie nun zu:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/foo?short=1
|
||||||
|
```
|
||||||
|
|
||||||
|
oder
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/foo?short=True
|
||||||
|
```
|
||||||
|
|
||||||
|
oder
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/foo?short=true
|
||||||
|
```
|
||||||
|
|
||||||
|
oder
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/foo?short=on
|
||||||
|
```
|
||||||
|
|
||||||
|
oder
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/foo?short=yes
|
||||||
|
```
|
||||||
|
|
||||||
|
gehen, oder zu irgendeiner anderen Variante der Groß-/Kleinschreibung (Alles groß, Anfangsbuchstabe groß, usw.), dann wird Ihre Funktion den Parameter `short` mit dem `bool`-Wert `True` sehen, ansonsten mit dem Wert `False`.
|
||||||
|
|
||||||
|
## Mehrere Pfad- und Query-Parameter
|
||||||
|
|
||||||
|
Sie können mehrere Pfad-Parameter und Query-Parameter gleichzeitig deklarieren, **FastAPI** weiß, was welches ist.
|
||||||
|
|
||||||
|
Und Sie müssen sie auch nicht in einer spezifischen Reihenfolge deklarieren.
|
||||||
|
|
||||||
|
Parameter werden anhand ihres Namens erkannt:
|
||||||
|
|
||||||
|
=== "Python 3.10+"
|
||||||
|
|
||||||
|
```Python hl_lines="6 8"
|
||||||
|
{!> ../../../docs_src/query_params/tutorial004_py310.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python 3.8+"
|
||||||
|
|
||||||
|
```Python hl_lines="8 10"
|
||||||
|
{!> ../../../docs_src/query_params/tutorial004.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Erforderliche Query-Parameter
|
||||||
|
|
||||||
|
Wenn Sie einen Defaultwert für Nicht-Pfad-Parameter deklarieren (Bis jetzt haben wir nur Query-Parameter gesehen), dann ist der Parameter nicht erforderlich.
|
||||||
|
|
||||||
|
Wenn Sie keinen spezifischen Wert haben wollen, sondern der Parameter einfach optional sein soll, dann setzen Sie den Defaultwert auf `None`.
|
||||||
|
|
||||||
|
Aber wenn Sie wollen, dass ein Query-Parameter erforderlich ist, vergeben Sie einfach keinen Defaultwert:
|
||||||
|
|
||||||
|
```Python hl_lines="6-7"
|
||||||
|
{!../../../docs_src/query_params/tutorial005.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
Hier ist `needy` ein erforderlicher Query-Parameter vom Typ `str`.
|
||||||
|
|
||||||
|
Wenn Sie in Ihrem Browser eine URL wie:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/foo-item
|
||||||
|
```
|
||||||
|
|
||||||
|
... öffnen, ohne den benötigten Parameter `needy`, dann erhalten Sie einen Fehler wie den folgenden:
|
||||||
|
|
||||||
|
```JSON
|
||||||
|
{
|
||||||
|
"detail": [
|
||||||
|
{
|
||||||
|
"type": "missing",
|
||||||
|
"loc": [
|
||||||
|
"query",
|
||||||
|
"needy"
|
||||||
|
],
|
||||||
|
"msg": "Field required",
|
||||||
|
"input": null,
|
||||||
|
"url": "https://errors.pydantic.dev/2.1/v/missing"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Da `needy` ein erforderlicher Parameter ist, müssen Sie ihn in der URL setzen:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://127.0.0.1:8000/items/foo-item?needy=sooooneedy
|
||||||
|
```
|
||||||
|
|
||||||
|
... Das funktioniert:
|
||||||
|
|
||||||
|
```JSON
|
||||||
|
{
|
||||||
|
"item_id": "foo-item",
|
||||||
|
"needy": "sooooneedy"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Und natürlich können Sie einige Parameter als erforderlich, einige mit Defaultwert, und einige als vollständig optional definieren:
|
||||||
|
|
||||||
|
=== "Python 3.10+"
|
||||||
|
|
||||||
|
```Python hl_lines="8"
|
||||||
|
{!> ../../../docs_src/query_params/tutorial006_py310.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
=== "Python 3.8+"
|
||||||
|
|
||||||
|
```Python hl_lines="10"
|
||||||
|
{!> ../../../docs_src/query_params/tutorial006.py!}
|
||||||
|
```
|
||||||
|
|
||||||
|
In diesem Fall gibt es drei Query-Parameter:
|
||||||
|
|
||||||
|
* `needy`, ein erforderlicher `str`.
|
||||||
|
* `skip`, ein `int` mit einem Defaultwert `0`.
|
||||||
|
* `limit`, ein optionales `int`.
|
||||||
|
|
||||||
|
!!! tip "Tipp"
|
||||||
|
Sie können auch `Enum`s verwenden, auf die gleiche Weise wie mit [Pfad-Parametern](path-params.md#vordefinierte-parameterwerte){.internal-link target=_blank}.
|
||||||
Loading…
Reference in New Issue