Browse Source

Update tutorial/body-nested-models.md

pull/14015/head
Nils Lindemann 2 weeks ago
parent
commit
d35b058029
  1. 64
      docs/de/docs/tutorial/body-nested-models.md

64
docs/de/docs/tutorial/body-nested-models.md

@ -1,20 +1,20 @@
# Body – Verschachtelte Modelle # Body – Verschachtelte Modelle { #body-nested-models }
Mit **FastAPI** können Sie (dank Pydantic) beliebig tief verschachtelte Modelle definieren, validieren und dokumentieren. Mit **FastAPI** können Sie (dank Pydantic) beliebig tief verschachtelte Modelle definieren, validieren, dokumentieren und verwenden.
## Listen als Felder ## Listen als Felder { #list-fields }
Sie können ein Attribut als Kindtyp definieren, zum Beispiel eine Python-`list`e. Sie können ein Attribut als Kindtyp definieren, zum Beispiel eine Python-`list`.
{* ../../docs_src/body_nested_models/tutorial001_py310.py hl[12] *} {* ../../docs_src/body_nested_models/tutorial001_py310.py hl[12] *}
Das bewirkt, dass `tags` eine Liste ist, wenngleich es nichts über den Typ der Elemente der Liste aussagt. Das bewirkt, dass `tags` eine Liste ist, wenngleich es nichts über den Typ der Elemente der Liste aussagt.
## Listen mit Typ-Parametern als Felder ## Listen mit Typ-Parametern als Felder { #list-fields-with-type-parameter }
Aber Python erlaubt es, Listen mit inneren Typen, auch „Typ-Parameter“ genannt, zu deklarieren. Aber Python erlaubt es, Listen mit inneren Typen, auch „Typ-Parameter“ genannt, zu deklarieren.
### `List` von `typing` importieren ### `List` von `typing` importieren { #import-typings-list }
In Python 3.9 oder darüber können Sie einfach `list` verwenden, um diese Typannotationen zu deklarieren, wie wir unten sehen werden. 💡 In Python 3.9 oder darüber können Sie einfach `list` verwenden, um diese Typannotationen zu deklarieren, wie wir unten sehen werden. 💡
@ -22,7 +22,7 @@ In Python-Versionen vor 3.9 (3.6 und darüber), müssen Sie zuerst `List` von Py
{* ../../docs_src/body_nested_models/tutorial002.py hl[1] *} {* ../../docs_src/body_nested_models/tutorial002.py hl[1] *}
### Eine `list`e mit einem Typ-Parameter deklarieren ### Eine `list` mit einem Typ-Parameter deklarieren { #declare-a-list-with-a-type-parameter }
Um Typen wie `list`, `dict`, `tuple` mit inneren Typ-Parametern (inneren Typen) zu deklarieren: Um Typen wie `list`, `dict`, `tuple` mit inneren Typ-Parametern (inneren Typen) zu deklarieren:
@ -51,7 +51,7 @@ In unserem Beispiel können wir also bewirken, dass `tags` spezifisch eine „Li
{* ../../docs_src/body_nested_models/tutorial002_py310.py hl[12] *} {* ../../docs_src/body_nested_models/tutorial002_py310.py hl[12] *}
## Set-Typen ## Set-Typen { #set-types }
Aber dann denken wir darüber nach und stellen fest, dass sich die Tags nicht wiederholen sollen, es sollen eindeutige Strings sein. Aber dann denken wir darüber nach und stellen fest, dass sich die Tags nicht wiederholen sollen, es sollen eindeutige Strings sein.
@ -67,7 +67,7 @@ Und wann immer Sie diese Daten ausgeben, selbst wenn die Quelle Duplikate hatte,
Und es wird entsprechend annotiert/dokumentiert. Und es wird entsprechend annotiert/dokumentiert.
## Verschachtelte Modelle ## Verschachtelte Modelle { #nested-models }
Jedes Attribut eines Pydantic-Modells hat einen Typ. Jedes Attribut eines Pydantic-Modells hat einen Typ.
@ -77,19 +77,19 @@ Sie können also tief verschachtelte JSON-„Objekte“ deklarieren, mit spezifi
Alles das beliebig tief verschachtelt. Alles das beliebig tief verschachtelt.
### Ein Kindmodell definieren ### Ein Kindmodell definieren { #define-a-submodel }
Wir können zum Beispiel ein `Image`-Modell definieren. Für ein Beispiel können wir ein `Image`-Modell definieren.
{* ../../docs_src/body_nested_models/tutorial004_py310.py hl[7:9] *} {* ../../docs_src/body_nested_models/tutorial004_py310.py hl[7:9] *}
### Das Kindmodell als Typ verwenden ### Das Kindmodell als Typ verwenden { #use-the-submodel-as-a-type }
Und dann können wir es als Typ eines Attributes verwenden. Und dann können wir es als Typ eines Attributes verwenden:
{* ../../docs_src/body_nested_models/tutorial004_py310.py hl[18] *} {* ../../docs_src/body_nested_models/tutorial004_py310.py hl[18] *}
Das würde bedeuten, dass **FastAPI** einen Body erwartet wie: Das würde bedeuten, dass **FastAPI** einen Body wie folgt erwartet:
```JSON ```JSON
{ {
@ -112,25 +112,25 @@ Wiederum, nur mit dieser Deklaration erhalten Sie von **FastAPI**:
* Datenvalidierung * Datenvalidierung
* Automatische Dokumentation * Automatische Dokumentation
## Spezielle Typen und Validierungen ## Spezielle Typen und Validierungen { #special-types-and-validation }
Abgesehen von normalen einfachen Typen, wie `str`, `int`, `float`, usw. können Sie komplexere einfache Typen verwenden, die von `str` erben. Abgesehen von normalen einfachen Typen wie `str`, `int`, `float`, usw. können Sie komplexere einfache Typen verwenden, die von `str` erben.
Um alle Optionen kennenzulernen, die Sie haben, schauen Sie sich <a href="https://docs.pydantic.dev/latest/concepts/types/" class="external-link" target="_blank">Pydantics Typübersicht</a> an. Sie werden im nächsten Kapitel ein paar Beispiele kennenlernen. Um alle Optionen kennenzulernen, die Sie haben, schauen Sie sich <a href="https://docs.pydantic.dev/latest/concepts/types/" class="external-link" target="_blank">Pydantics Typübersicht</a> an. Sie werden einige Beispiele im nächsten Kapitel kennenlernen.
Da wir zum Beispiel im `Image`-Modell ein Feld `url` haben, können wir deklarieren, dass das eine Instanz von Pydantics `HttpUrl` sein soll, anstelle eines `str`: Zum Beispiel, da wir im `Image`-Modell ein Feld `url` haben, können wir deklarieren, dass das eine Instanz von Pydantics `HttpUrl` sein soll, anstelle eines `str`:
{* ../../docs_src/body_nested_models/tutorial005_py310.py hl[2,8] *} {* ../../docs_src/body_nested_models/tutorial005_py310.py hl[2,8] *}
Es wird getestet, ob der String eine gültige URL ist, und als solche wird er in JSON Schema / OpenAPI dokumentiert. Es wird getestet, ob der String eine gültige URL ist, und als solche wird er in JSON Schema / OpenAPI dokumentiert.
## Attribute mit Listen von Kindmodellen ## Attribute mit Listen von Kindmodellen { #attributes-with-lists-of-submodels }
Sie können Pydantic-Modelle auch als Typen innerhalb von `list`, `set`, usw. verwenden: Sie können Pydantic-Modelle auch als Typen innerhalb von `list`, `set`, usw. verwenden:
{* ../../docs_src/body_nested_models/tutorial006_py310.py hl[18] *} {* ../../docs_src/body_nested_models/tutorial006_py310.py hl[18] *}
Das wird einen JSON-Body erwarten (konvertieren, validieren, dokumentieren), wie: Das wird einen JSON-Body erwarten (konvertieren, validieren, dokumentieren, usw.) wie:
```JSON hl_lines="11" ```JSON hl_lines="11"
{ {
@ -156,27 +156,27 @@ Das wird einen JSON-Body erwarten (konvertieren, validieren, dokumentieren), wie
} }
``` ```
/// info /// info | Info
Beachten Sie, dass der `images`-Schlüssel jetzt eine Liste von Bild-Objekten hat. Beachten Sie, dass der `images`-Schlüssel jetzt eine Liste von Bild-Objekten hat.
/// ///
## Tief verschachtelte Modelle ## Tief verschachtelte Modelle { #deeply-nested-models }
Sie können beliebig tief verschachtelte Modelle definieren: Sie können beliebig tief verschachtelte Modelle definieren:
{* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *} {* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *}
/// info /// info | Info
Beachten Sie, wie `Offer` eine Liste von `Item`s hat, von denen jedes seinerseits eine optionale Liste von `Image`s hat. Beachten Sie, wie `Offer` eine Liste von `Item`s hat, die ihrerseits eine optionale Liste von `Image`s haben.
/// ///
## Bodys aus reinen Listen ## Bodys aus reinen Listen { #bodies-of-pure-lists }
Wenn Sie möchten, dass das äußerste Element des JSON-Bodys ein JSON-`array` (eine Python-`list`e) ist, können Sie den Typ im Funktionsparameter deklarieren, mit der gleichen Syntax wie in Pydantic-Modellen: Wenn das äußerste Element des JSON-Bodys, das Sie erwarten, ein JSON-`array` (eine Python-`list`) ist, können Sie den Typ im Funktionsparameter deklarieren, mit der gleichen Syntax wie in Pydantic-Modellen:
```Python ```Python
images: List[Image] images: List[Image]
@ -192,7 +192,7 @@ so wie in:
{* ../../docs_src/body_nested_models/tutorial008_py39.py hl[13] *} {* ../../docs_src/body_nested_models/tutorial008_py39.py hl[13] *}
## Editor-Unterstützung überall ## Editor-Unterstützung überall { #editor-support-everywhere }
Und Sie erhalten Editor-Unterstützung überall. Und Sie erhalten Editor-Unterstützung überall.
@ -204,11 +204,11 @@ Sie würden diese Editor-Unterstützung nicht erhalten, wenn Sie direkt mit `dic
Aber Sie müssen sich auch nicht weiter um die Modelle kümmern, hereinkommende Dicts werden automatisch in sie konvertiert. Und was Sie zurückgeben, wird automatisch nach JSON konvertiert. Aber Sie müssen sich auch nicht weiter um die Modelle kümmern, hereinkommende Dicts werden automatisch in sie konvertiert. Und was Sie zurückgeben, wird automatisch nach JSON konvertiert.
## Bodys mit beliebigen `dict`s ## Bodys mit beliebigen `dict`s { #bodies-of-arbitrary-dicts }
Sie können einen Body auch als `dict` deklarieren, mit Schlüsseln eines Typs und Werten eines anderen Typs. Sie können einen Body auch als `dict` deklarieren, mit Schlüsseln eines Typs und Werten eines anderen Typs.
So brauchen Sie vorher nicht zu wissen, wie die Feld-/Attribut-Namen lauten (wie es bei Pydantic-Modellen der Fall wäre). So brauchen Sie vorher nicht zu wissen, wie die Feld-/Attributnamen lauten (wie es bei Pydantic-Modellen der Fall wäre).
Das ist nützlich, wenn Sie Schlüssel empfangen, deren Namen Sie nicht bereits kennen. Das ist nützlich, wenn Sie Schlüssel empfangen, deren Namen Sie nicht bereits kennen.
@ -218,7 +218,7 @@ Ein anderer nützlicher Anwendungsfall ist, wenn Sie Schlüssel eines anderen Ty
Das schauen wir uns mal an. Das schauen wir uns mal an.
Im folgenden Beispiel akzeptieren Sie irgendein `dict`, solange es `int`-Schlüssel und `float`-Werte hat. Im folgenden Beispiel akzeptieren Sie irgendein `dict`, solange es `int`-Schlüssel und `float`-Werte hat:
{* ../../docs_src/body_nested_models/tutorial009_py39.py hl[7] *} {* ../../docs_src/body_nested_models/tutorial009_py39.py hl[7] *}
@ -230,11 +230,11 @@ Aber Pydantic hat automatische Datenkonvertierung.
Das bedeutet, dass Ihre API-Clients nur Strings senden können, aber solange diese Strings nur Zahlen enthalten, wird Pydantic sie konvertieren und validieren. Das bedeutet, dass Ihre API-Clients nur Strings senden können, aber solange diese Strings nur Zahlen enthalten, wird Pydantic sie konvertieren und validieren.
Und das `dict` welches Sie als `weights` erhalten, wird `int`-Schlüssel und `float`-Werte haben. Und das `dict`, welches Sie als `weights` erhalten, wird `int`-Schlüssel und `float`-Werte haben.
/// ///
## Zusammenfassung ## Zusammenfassung { #recap }
Mit **FastAPI** haben Sie die maximale Flexibilität von Pydantic-Modellen, während Ihr Code einfach, kurz und elegant bleibt. Mit **FastAPI** haben Sie die maximale Flexibilität von Pydantic-Modellen, während Ihr Code einfach, kurz und elegant bleibt.

Loading…
Cancel
Save