Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d9f13eb

Browse files
author
Nils Lindemann
committed
tut/query-params.md (fastapi#10293)
1 parent 1a37f1b commit d9f13eb

1 file changed

Lines changed: 226 additions & 0 deletions

File tree

Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
# Query-Parameter
2+
3+
Wenn Sie in ihrer Funktion Parameter deklarieren, die nicht Teil der Pfad-Parameter sind, dann werden diese automatisch als „Query“-Parameter interpretiert.
4+
5+
```Python hl_lines="9"
6+
{!../../../docs_src/query_params/tutorial001.py!}
7+
```
8+
9+
Query-Parameter (Deutsch: Abfrage-Parameter) sind die Schlüssel-Wert-Paare, die nach dem `?` in einer URL aufgelistet sind, getrennt durch `&`-Zeichen.
10+
11+
Zum Beispiel sind in der URL:
12+
13+
```
14+
http://127.0.0.1:8000/items/?skip=0&limit=10
15+
```
16+
17+
... die Query-Parameter:
18+
19+
* `skip`: mit dem Wert `0`
20+
* `limit`: mit dem Wert `10`
21+
22+
Da sie Teil der URL sind, sind sie „naturgemäß“ Strings.
23+
24+
Aber wenn Sie sie mit Python-Typen deklarieren (im obigen Beispiel als `int`), werden sie zu diesem Typ konvertiert, und gegen diesen validiert.
25+
26+
Die gleichen Prozesse, die für Pfad-Parameter stattfinden, werden auch auf Query-Parameter angewendet:
27+
28+
* Editor Unterstützung (natürlich)
29+
* <abbr title="Konvertieren des Strings, der von einer HTTP-Anfrage kommt, in Python-Daten">„Parsen“</abbr> der Daten
30+
* Daten-Validierung
31+
* Automatische Dokumentation
32+
33+
## Defaultwerte
34+
35+
Da Query-Parameter nicht ein festgelegter Teil des Pfades sind, können sie optional sein und Defaultwerte haben.
36+
37+
Im obigen Beispiel haben sie die Defaultwerte `skip=0` und `limit=10`.
38+
39+
Wenn Sie also zur URL:
40+
41+
```
42+
http://127.0.0.1:8000/items/
43+
```
44+
45+
gehen, so ist das dasselbe wie die URL:
46+
47+
```
48+
http://127.0.0.1:8000/items/?skip=0&limit=10
49+
```
50+
51+
Aber wenn Sie zum Beispiel zu:
52+
53+
```
54+
http://127.0.0.1:8000/items/?skip=20
55+
```
56+
57+
gehen, werden die Parameter-Werte Ihrer Funktion sein:
58+
59+
* `skip=20`: da Sie das in der URL gesetzt haben
60+
* `limit=10`: weil das der Defaultwert ist
61+
62+
## Optionale Parameter
63+
64+
Auf die gleiche Weise können Sie optionale Query-Parameter deklarieren, indem Sie deren Defaultwert auf `None` setzen:
65+
66+
=== "Python 3.10+"
67+
68+
```Python hl_lines="7"
69+
{!> ../../../docs_src/query_params/tutorial002_py310.py!}
70+
```
71+
72+
=== "Python 3.8+"
73+
74+
```Python hl_lines="9"
75+
{!> ../../../docs_src/query_params/tutorial002.py!}
76+
```
77+
78+
In diesem Fall wird der Funktionsparameter `q` optional, und standardmäßig `None` sein.
79+
80+
!!! check
81+
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.
82+
83+
## Query-Parameter Typ-Konvertierung
84+
85+
Sie können auch `bool`-Typen deklarieren und sie werden konvertiert:
86+
87+
=== "Python 3.10+"
88+
89+
```Python hl_lines="7"
90+
{!> ../../../docs_src/query_params/tutorial003_py310.py!}
91+
```
92+
93+
=== "Python 3.8+"
94+
95+
```Python hl_lines="9"
96+
{!> ../../../docs_src/query_params/tutorial003.py!}
97+
```
98+
99+
Wenn Sie nun zu:
100+
101+
```
102+
http://127.0.0.1:8000/items/foo?short=1
103+
```
104+
105+
oder
106+
107+
```
108+
http://127.0.0.1:8000/items/foo?short=True
109+
```
110+
111+
oder
112+
113+
```
114+
http://127.0.0.1:8000/items/foo?short=true
115+
```
116+
117+
oder
118+
119+
```
120+
http://127.0.0.1:8000/items/foo?short=on
121+
```
122+
123+
oder
124+
125+
```
126+
http://127.0.0.1:8000/items/foo?short=yes
127+
```
128+
129+
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`.
130+
131+
## Mehrere Pfad- und Query-Parameter
132+
133+
Sie können mehrere Pfad-Parameter und Query-Parameter gleichzeitig deklarieren, **FastAPI** weiß, was welches ist.
134+
135+
Und Sie müssen sie auch nicht in einer spezifischen Reihenfolge deklarieren.
136+
137+
Parameter werden anhand ihres Namens erkannt:
138+
139+
=== "Python 3.10+"
140+
141+
```Python hl_lines="6 8"
142+
{!> ../../../docs_src/query_params/tutorial004_py310.py!}
143+
```
144+
145+
=== "Python 3.8+"
146+
147+
```Python hl_lines="8 10"
148+
{!> ../../../docs_src/query_params/tutorial004.py!}
149+
```
150+
151+
## Erforderliche Query-Parameter
152+
153+
Wenn Sie einen Defaultwert für Nicht-Pfad-Parameter deklarieren (Bis jetzt haben wir nur Query-Parameter gesehen), dann ist der Parameter nicht erforderlich.
154+
155+
Wenn Sie keinen spezifischen Wert haben wollen, sondern der Parameter einfach optional sein soll, dann setzen Sie den Defaultwert auf `None`.
156+
157+
Aber wenn Sie wollen, dass ein Query-Parameter erforderlich ist, vergeben Sie einfach keinen Defaultwert:
158+
159+
```Python hl_lines="6-7"
160+
{!../../../docs_src/query_params/tutorial005.py!}
161+
```
162+
163+
Hier ist `needy` ein erforderlicher Query-Parameter vom Typ `str`.
164+
165+
Wenn Sie in ihrem Browser eine URL wie:
166+
167+
```
168+
http://127.0.0.1:8000/items/foo-item
169+
```
170+
171+
... öffnen, ohne den benötigten Parameter `needy`, dann erhalten Sie einen Fehler wie den folgenden:
172+
173+
```JSON
174+
{
175+
"detail": [
176+
{
177+
"type": "missing",
178+
"loc": [
179+
"query",
180+
"needy"
181+
],
182+
"msg": "Field required",
183+
"input": null,
184+
"url": "https://errors.pydantic.dev/2.1/v/missing"
185+
}
186+
]
187+
}
188+
```
189+
190+
Da `needy` ein erforderlicher Parameter ist, müssen Sie ihn in der URL setzen:
191+
192+
```
193+
http://127.0.0.1:8000/items/foo-item?needy=sooooneedy
194+
```
195+
196+
... Das funktioniert:
197+
198+
```JSON
199+
{
200+
"item_id": "foo-item",
201+
"needy": "sooooneedy"
202+
}
203+
```
204+
205+
Und natürlich können Sie einige Parameter als erforderlich, einige mit Defaultwert, und einige als vollständig optional definieren:
206+
207+
=== "Python 3.10+"
208+
209+
```Python hl_lines="8"
210+
{!> ../../../docs_src/query_params/tutorial006_py310.py!}
211+
```
212+
213+
=== "Python 3.8+"
214+
215+
```Python hl_lines="10"
216+
{!> ../../../docs_src/query_params/tutorial006.py!}
217+
```
218+
219+
In diesem Fall gibt es drei Query-Parameter:
220+
221+
* `needy`, ein erforderlicher `str`.
222+
* `skip`, ein `int` mit einem Defaultwert `0`.
223+
* `limit`, ein optionales `int`.
224+
225+
!!! tip "Tipp"
226+
Sie können auch `Enum`s verwenden, auf dieselbe Weise wie mit [Pfad-Parametern](path-params.md#vordefinierte-parameterwerte){.internal-link target=_blank}.

0 commit comments

Comments
 (0)