committed by
GitHub
1 changed files with 139 additions and 0 deletions
@ -0,0 +1,139 @@ |
|||||
|
# Abhängigkeiten in Pfadoperation-Dekoratoren |
||||
|
|
||||
|
Manchmal benötigen Sie den Rückgabewert einer Abhängigkeit innerhalb Ihrer *Pfadoperation-Funktion* nicht wirklich. |
||||
|
|
||||
|
Oder die Abhängigkeit gibt keinen Wert zurück. |
||||
|
|
||||
|
Aber Sie müssen Sie trotzdem ausführen/auflösen. |
||||
|
|
||||
|
In diesen Fällen können Sie, anstatt einen Parameter der *Pfadoperation-Funktion* mit `Depends` zu deklarieren, eine `list`e von `dependencies` zum *Pfadoperation-Dekorator* hinzufügen. |
||||
|
|
||||
|
## `dependencies` zum *Pfadoperation-Dekorator* hinzufügen |
||||
|
|
||||
|
Der *Pfadoperation-Dekorator* erhält ein optionales Argument `dependencies`. |
||||
|
|
||||
|
Es sollte eine `list`e von `Depends()` sein: |
||||
|
|
||||
|
=== "Python 3.9+" |
||||
|
|
||||
|
```Python hl_lines="19" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8+" |
||||
|
|
||||
|
```Python hl_lines="18" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8 nicht annotiert" |
||||
|
|
||||
|
!!! tip "Tipp" |
||||
|
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
||||
|
|
||||
|
```Python hl_lines="17" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006.py!} |
||||
|
``` |
||||
|
|
||||
|
Diese Abhängigkeiten werden auf die gleiche Weise wie normale Abhängigkeiten ausgeführt/aufgelöst. Aber ihr Wert (falls sie einen zurückgeben) wird nicht an Ihre *Pfadoperation-Funktion* übergeben. |
||||
|
|
||||
|
!!! tip "Tipp" |
||||
|
Einige Editoren prüfen, ob Funktionsparameter nicht verwendet werden, und zeigen das als Fehler an. |
||||
|
|
||||
|
Wenn Sie `dependencies` im *Pfadoperation-Dekorator* verwenden, stellen Sie sicher, dass sie ausgeführt werden, während gleichzeitig Ihr Editor/Ihre Tools keine Fehlermeldungen ausgeben. |
||||
|
|
||||
|
Damit wird auch vermieden, neue Entwickler möglicherweise zu verwirren, die einen nicht verwendeten Parameter in Ihrem Code sehen und ihn für unnötig halten könnten. |
||||
|
|
||||
|
!!! info |
||||
|
In diesem Beispiel verwenden wir zwei erfundene benutzerdefinierte Header `X-Key` und `X-Token`. |
||||
|
|
||||
|
Aber in realen Fällen würden Sie bei der Implementierung von Sicherheit mehr Vorteile durch die Verwendung der integrierten [Sicherheits-Werkzeuge (siehe nächstes Kapitel)](../security/index.md){.internal-link target=_blank} erzielen. |
||||
|
|
||||
|
## Abhängigkeitsfehler und -Rückgabewerte |
||||
|
|
||||
|
Sie können dieselben Abhängigkeits-*Funktionen* verwenden, die Sie normalerweise verwenden. |
||||
|
|
||||
|
### Abhängigkeitsanforderungen |
||||
|
|
||||
|
Sie können Anforderungen für einen Request (wie Header) oder andere Unterabhängigkeiten deklarieren: |
||||
|
|
||||
|
=== "Python 3.9+" |
||||
|
|
||||
|
```Python hl_lines="8 13" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8+" |
||||
|
|
||||
|
```Python hl_lines="7 12" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8 nicht annotiert" |
||||
|
|
||||
|
!!! tip "Tipp" |
||||
|
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
||||
|
|
||||
|
```Python hl_lines="6 11" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006.py!} |
||||
|
``` |
||||
|
|
||||
|
### Exceptions auslösen |
||||
|
|
||||
|
Die Abhängigkeiten können Exceptions `raise`n, genau wie normale Abhängigkeiten: |
||||
|
|
||||
|
=== "Python 3.9+" |
||||
|
|
||||
|
```Python hl_lines="10 15" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8+" |
||||
|
|
||||
|
```Python hl_lines="9 14" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8 nicht annotiert" |
||||
|
|
||||
|
!!! tip "Tipp" |
||||
|
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
||||
|
|
||||
|
```Python hl_lines="8 13" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006.py!} |
||||
|
``` |
||||
|
|
||||
|
### Rückgabewerte |
||||
|
|
||||
|
Und sie können Werte zurückgeben oder nicht, die Werte werden nicht verwendet. |
||||
|
|
||||
|
Sie können also eine normale Abhängigkeit (die einen Wert zurückgibt), die Sie bereits an anderer Stelle verwenden, wiederverwenden, und auch wenn der Wert nicht verwendet wird, wird die Abhängigkeit ausgeführt: |
||||
|
|
||||
|
=== "Python 3.9+" |
||||
|
|
||||
|
```Python hl_lines="11 16" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8+" |
||||
|
|
||||
|
```Python hl_lines="10 15" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006_an.py!} |
||||
|
``` |
||||
|
|
||||
|
=== "Python 3.8 nicht annotiert" |
||||
|
|
||||
|
!!! tip "Tipp" |
||||
|
Bevorzugen Sie die `Annotated`-Version, falls möglich. |
||||
|
|
||||
|
```Python hl_lines="9 14" |
||||
|
{!> ../../../docs_src/dependencies/tutorial006.py!} |
||||
|
``` |
||||
|
|
||||
|
## Abhängigkeiten für eine Gruppe von *Pfadoperationen* |
||||
|
|
||||
|
Wenn Sie später lesen, wie Sie größere Anwendungen strukturieren ([Größere Anwendungen – Mehrere Dateien](../../tutorial/bigger-applications.md){.internal-link target=_blank}), möglicherweise mit mehreren Dateien, lernen Sie, wie Sie einen einzelnen `dependencies`-Parameter für eine Gruppe von *Pfadoperationen* deklarieren. |
||||
|
|
||||
|
## Globale Abhängigkeiten |
||||
|
|
||||
|
Als Nächstes werden wir sehen, wie man Abhängigkeiten zur gesamten `FastAPI`-Anwendung hinzufügt, sodass sie für jede *Pfadoperation* gelten. |
Loading…
Reference in new issue