From dc0636c53f385f031d0686a58f42f2b9fd394bbd Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Fri, 29 Sep 2023 10:42:38 +0200 Subject: [PATCH 01/14] =?UTF-8?q?=F0=9F=8C=90=20Add=20German=20translation?= =?UTF-8?q?=20for=20`docs/tutorial/extra-models.md`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Full translation * In sync with current en/docs/tutorial/extra-models.md * Manually translated (Google translate rarely used) * Checked for errors using LanguageTool * Manually checked --- docs/de/docs/tutorial/extra-models.md | 252 ++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 docs/de/docs/tutorial/extra-models.md diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md new file mode 100644 index 0000000000000..a4848b12a177e --- /dev/null +++ b/docs/de/docs/tutorial/extra-models.md @@ -0,0 +1,252 @@ +# Extra-Modelle + +Fahren wir beim letzten Beispiel fort. Es gibt normalerweise mehrere zusammengehörende Modelle. + +Insbesondere Nutzer-Modelle, denn: + +* Das **hereinkommende Modell** sollte ein Passwort haben können. +* Das **herausgehende Modell** sollte kein Passwort haben. +* Das **Datenbank-Modell** sollte wahrscheinlich ein gehashtes Passwort haben. + +!!! danger "Gefahr" + Speichern Sie niemals das Klartext-Passwort eines Nutzers. Speichern Sie immer den "sicheren Hash", den Sie verifizieren können. + + Falls Ihnen das nichts sagt, in den [Sicherheits-Kapiteln](security/simple-oauth2.md#password-hashing){.internal-link target=_blank} werden Sie lernen, was ein "Passwort-Hash" ist. + +## Mehrere Modelle + +Hier der generelle Weg, wie die Modelle mit ihren Passwort-Feldern aussehen könnten, und an welchen Orten sie verwendet werden würden. + +=== "Python 3.10+" + + ```Python hl_lines="7 9 14 20 22 27-28 31-33 38-39" + {!> ../../../docs_src/extra_models/tutorial001_py310.py!} + ``` + +=== "Python 3.6+" + + ```Python hl_lines="9 11 16 22 24 29-30 33-35 40-41" + {!> ../../../docs_src/extra_models/tutorial001.py!} + ``` + +### Über `**user_in.dict()` + +#### Pydantic's `.dict()` + +`user_in` ist ein Pydantic-Modell der Klasse `UserIn`. + +Pydantic-Modelle haben eine `.dict()`-Methode, die ein `dict` mit den Daten des Modells zurückgibt. + +Wenn wir also ein Pydantic-Objekt `user_in` erstellen, etwa so: + +```Python +user_in = UserIn(username="john", password="secret", email="john.doe@example.com") +``` + +und wir rufen seine `.dict()`-Methode auf: + +```Python +user_dict = user_in.dict() +``` + +dann haben wir jetzt in der Variable `user_dict` ein `dict` mit den gleichen Daten (es ist ein `dict` statt eines Pydantic-Modell-Objekts). + +Wenn wir es ausgeben: + +```Python +print(user_dict) +``` + +bekommen wir ein Python `dict`: + +```Python +{ + 'username': 'john', + 'password': 'secret', + 'email': 'john.doe@example.com', + 'full_name': None, +} +``` + +#### Ein `dict` entpacken + +Wenn wir ein `dict` wie `user_dict` nehmen, und es einer Funktion (oder Klassenmethode) mittels `**user_dict` übergeben, wird Python es "entpacken". Es wird die Schlüssel und Werte von `user_dict` direkt als Schlüsselwort-Argumente übergeben. + +Wenn wir also das `user_dict` von oben nehmen und schreiben: + +```Python +UserInDB(**user_dict) +``` + +dann ist das ungefähr äquivalent zu: + +```Python +UserInDB( + username="john", + password="secret", + email="john.doe@example.com", + full_name=None, +) +``` + +Oder, präziser, `user_dict` wird direkt verwendet, welche Werte es auch immer haben mag: + +```Python +UserInDB( + username = user_dict["username"], + password = user_dict["password"], + email = user_dict["email"], + full_name = user_dict["full_name"], +) +``` + +#### Ein Pydantic-Modell aus den Inhalten eines anderen erstellen. + +Da wir in obigem Beispiel `user_dict` mittels `user_in.dict()` erzeugt haben, ist dieser Code: + +```Python +user_dict = user_in.dict() +UserInDB(**user_dict) +``` + +äquivalent zu: + +```Python +UserInDB(**user_in.dict()) +``` + +... weil `user_in.dict()` ein `dict` ist, und dann lassen wir Python es "entpacken", indem wir es `UserInDB` übergeben, mit vorangestelltem `**`. + +Wir erhalten also ein Pydantic-Modell aus den Daten eines anderen Pydantic-Modells. + +#### Ein `dict` entpacken und zusätzliche Schlüsselwort-Argumente + +Und dann fügen wir ein noch weiteres Schlüsselwort-Argument hinzu, `hashed_password=hashed_password`: + +```Python +UserInDB(**user_in.dict(), hashed_password=hashed_password) +``` + +... was am Ende ergibt: + +```Python +UserInDB( + username = user_dict["username"], + password = user_dict["password"], + email = user_dict["email"], + full_name = user_dict["full_name"], + hashed_password = hashed_password, +) +``` + +!!! warning "Achtung" + Die Hilfsfunktionen `fake_password_hasher` und `fake_save_user` demonstrieren nur den möglichen Fluss der Daten und bieten natürlich keine echte Sicherheit. + +## Verdopplung vermeiden + +Reduzierung von Code-Verdoppelung ist eine der Kern-Ideen von **FastAPI**. + +Weil Verdoppelung von Code die Wahrscheinlichkeit von Fehlern, Sicherheitsproblemen, Desynchronisation (Code wird nur an einer Stelle verändert, aber nicht an einer anderen), usw. erhöht. + +Unsere Modelle teilen alle eine Menge der Daten und verdoppeln Attribut-Namen und -Typen. + +Das können wir besser machen. + +Wir deklarieren ein `UserBase`-Modell, das als Basis für unsere anderen Modelle dient. Dann können wir Kindklassen erstellen, die seine Attribute (Typ-Deklarationen, Validierungen, usw.) erben. + +Die ganze Daten-Konvertierung, -Validierung, -Dokumentation, usw. wird immer noch wie gehabt funktionieren. + +Auf diese Weise beschreiben wir nur noch die Unterschiede zwischen den Modellen (mit Klartext-`password`, mit `hashed_password`, und ohne Passwort): + +=== "Python 3.10+" + + ```Python hl_lines="7 13-14 17-18 21-22" + {!> ../../../docs_src/extra_models/tutorial002_py310.py!} + ``` + +=== "Python 3.6+" + + ```Python hl_lines="9 15-16 19-20 23-24" + {!> ../../../docs_src/extra_models/tutorial002.py!} + ``` + +## `Union`, oder `anyOf` + +Sie können deklarieren, dass eine Response eine `Union` mehrerer Typen ist, sprich, einer dieser Typen. + +Das wird in OpenAPI mit `anyOf` angezeigt. + +Um das zu tun, verwenden Sie Pythons Standard Typ-Hinweis `typing.Union`: + +!!! note "Hinweis" + Listen Sie, wenn Sie eine `Union` definieren, denjenigen Typ zuerst, der am spezifischsten ist, gefolgt von den weniger spezifischen Typen. Im Beispiel oben, in `Union[PlaneItem, CarItem]` also den spezifischeren `PlaneItem` vor dem weniger spezifischen `CarItem`. + +=== "Python 3.10+" + + ```Python hl_lines="1 14-15 18-20 33" + {!> ../../../docs_src/extra_models/tutorial003_py310.py!} + ``` + +=== "Python 3.6+" + + ```Python hl_lines="1 14-15 18-20 33" + {!> ../../../docs_src/extra_models/tutorial003.py!} + ``` + +### `Union` in Python 3.10 + +In diesem Beispiel übergeben wir dem Argument `response_model` den Wert `Union[PlaneItem, CarItem]`. + +Da wir es als **Wert einem Argument überreichen**, statt es als **Typ-Annotation** zu verwenden, müssen wir `Union` verwenden, selbst in Python 3.10. + +Wenn es eine Typ-Annotation gewesen wäre, hätten wir auch den vertikalen Trennstrich verwenden können, wie in: + +```Python +some_variable: PlaneItem | CarItem +``` + +Aber wenn wir das in der Zuweisung `response_model=PlaneItem | CarItem` machen, erhalten wir eine Fehlermeldung, da Python versucht, eine **ungültige Operation** zwischen `PlaneItem` und `CarItem` durchzuführen, statt es als Typ-Annotation zu interpretieren. + +## Listen von Modellen + +Genauso können Sie eine Response deklarieren, die eine Liste von Objekten ist. + +Verwenden Sie dafür Pythons normales `typing.List` (oder nur `list` in Python 3.9 und darüber): + +=== "Python 3.9+" + + ```Python hl_lines="18" + {!> ../../../docs_src/extra_models/tutorial004_py39.py!} + ``` + +=== "Python 3.6+" + + ```Python hl_lines="1 20" + {!> ../../../docs_src/extra_models/tutorial004.py!} + ``` + +## Response mit beliebigem `dict` + +Sie könne auch eine Response deklarieren, die ein beliebiges `dict` zurückgibt, bei dem nur die Typen der Schlüssel und der Werte bekannt sind, ohne ein Pydantic-Modell zu verwenden. + +Das ist nützlich, wenn Sie die gültigen Feld-/Attribut-Namen von vorneherein nicht wissen (was für ein Pydantic-Modell notwendig ist). + +In diesem Fall können Sie `typing.Dict` verwenden (oder nur `dict` in Python 3.9 und darüber): + +=== "Python 3.9+" + + ```Python hl_lines="6" + {!> ../../../docs_src/extra_models/tutorial005_py39.py!} + ``` + +=== "Python 3.6+" + + ```Python hl_lines="1 8" + {!> ../../../docs_src/extra_models/tutorial005.py!} + ``` + +## Rekapitulation + +Verwenden Sie gerne mehrere Pydantic-Modelle und vererben Sie je nach Bedarf. + +Sie brauchen kein einzelnes Datenmodell pro Einheit, wenn diese Einheit verschiedene Zustände annehmen kann. So wie unsere Nutzer-"Einheit", welche einen Zustand mit `password`, einen mit `password_hash` und einen ohne Passwort hatte. From 2a950ad7d8c24722da7e9aef3da4c5b210ce39fd Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Thu, 5 Oct 2023 04:31:13 +0200 Subject: [PATCH 02/14] "Rekapitulation" -> "Zusammenfassung" --- docs/de/docs/tutorial/extra-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index a4848b12a177e..b362e8b0c6a0d 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -245,7 +245,7 @@ In diesem Fall können Sie `typing.Dict` verwenden (oder nur `dict` in Python 3. {!> ../../../docs_src/extra_models/tutorial005.py!} ``` -## Rekapitulation +## Zusammenfassung Verwenden Sie gerne mehrere Pydantic-Modelle und vererben Sie je nach Bedarf. From 2212055b2075be4e225214b964c661997a3a7e04 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Tue, 17 Oct 2023 19:05:12 +0200 Subject: [PATCH 03/14] "Normal" -> "Standard" --- docs/de/docs/tutorial/extra-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index b362e8b0c6a0d..ecb7a1a579a90 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -211,7 +211,7 @@ Aber wenn wir das in der Zuweisung `response_model=PlaneItem | CarItem` machen, Genauso können Sie eine Response deklarieren, die eine Liste von Objekten ist. -Verwenden Sie dafür Pythons normales `typing.List` (oder nur `list` in Python 3.9 und darüber): +Verwenden Sie dafür Pythons Standard `typing.List` (oder nur `list` in Python 3.9 und darüber): === "Python 3.9+" From 1b6cda5631eb8dc6a1ed11357c3c1d9a1e786dec Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Tue, 17 Oct 2023 20:23:34 +0200 Subject: [PATCH 04/14] Sync with #10442 --- docs/de/docs/tutorial/extra-models.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index ecb7a1a579a90..75c677b8def51 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -23,7 +23,7 @@ Hier der generelle Weg, wie die Modelle mit ihren Passwort-Feldern aussehen kön {!> ../../../docs_src/extra_models/tutorial001_py310.py!} ``` -=== "Python 3.6+" +=== "Python 3.8+" ```Python hl_lines="9 11 16 22 24 29-30 33-35 40-41" {!> ../../../docs_src/extra_models/tutorial001.py!} @@ -164,7 +164,7 @@ Auf diese Weise beschreiben wir nur noch die Unterschiede zwischen den Modellen {!> ../../../docs_src/extra_models/tutorial002_py310.py!} ``` -=== "Python 3.6+" +=== "Python 3.8+" ```Python hl_lines="9 15-16 19-20 23-24" {!> ../../../docs_src/extra_models/tutorial002.py!} @@ -187,7 +187,7 @@ Um das zu tun, verwenden Sie Pythons Standard Typ-Hinweis ../../../docs_src/extra_models/tutorial003.py!} @@ -219,7 +219,7 @@ Verwenden Sie dafür Pythons Standard `typing.List` (oder nur `list` in Python 3 {!> ../../../docs_src/extra_models/tutorial004_py39.py!} ``` -=== "Python 3.6+" +=== "Python 3.8+" ```Python hl_lines="1 20" {!> ../../../docs_src/extra_models/tutorial004.py!} @@ -239,7 +239,7 @@ In diesem Fall können Sie `typing.Dict` verwenden (oder nur `dict` in Python 3. {!> ../../../docs_src/extra_models/tutorial005_py39.py!} ``` -=== "Python 3.6+" +=== "Python 3.8+" ```Python hl_lines="1 8" {!> ../../../docs_src/extra_models/tutorial005.py!} From 3de713557f86a401cfa4103ca924ff0df8294c2f Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Tue, 24 Oct 2023 02:05:32 +0200 Subject: [PATCH 05/14] Translate link pointing to simple-oauth2.md That document is now translated, see #10504 --- docs/de/docs/tutorial/extra-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index 75c677b8def51..21631bd6dd899 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -11,7 +11,7 @@ Insbesondere Nutzer-Modelle, denn: !!! danger "Gefahr" Speichern Sie niemals das Klartext-Passwort eines Nutzers. Speichern Sie immer den "sicheren Hash", den Sie verifizieren können. - Falls Ihnen das nichts sagt, in den [Sicherheits-Kapiteln](security/simple-oauth2.md#password-hashing){.internal-link target=_blank} werden Sie lernen, was ein "Passwort-Hash" ist. + Falls Ihnen das nichts sagt, in den [Sicherheits-Kapiteln](security/simple-oauth2.md#passwort-hashing){.internal-link target=_blank} werden Sie lernen, was ein "Passwort-Hash" ist. ## Mehrere Modelle From af735baf9c4b853a8673e0fda724c4720a2801f9 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Wed, 25 Oct 2023 23:38:05 +0200 Subject: [PATCH 06/14] "Nutzer" -> "Benutzer" --- docs/de/docs/tutorial/extra-models.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index 21631bd6dd899..b2c98a3f30912 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -2,14 +2,14 @@ Fahren wir beim letzten Beispiel fort. Es gibt normalerweise mehrere zusammengehörende Modelle. -Insbesondere Nutzer-Modelle, denn: +Insbesondere Benutzer-Modelle, denn: * Das **hereinkommende Modell** sollte ein Passwort haben können. * Das **herausgehende Modell** sollte kein Passwort haben. * Das **Datenbank-Modell** sollte wahrscheinlich ein gehashtes Passwort haben. !!! danger "Gefahr" - Speichern Sie niemals das Klartext-Passwort eines Nutzers. Speichern Sie immer den "sicheren Hash", den Sie verifizieren können. + Speichern Sie niemals das Klartext-Passwort eines Benutzers. Speichern Sie immer den "sicheren Hash", den Sie verifizieren können. Falls Ihnen das nichts sagt, in den [Sicherheits-Kapiteln](security/simple-oauth2.md#passwort-hashing){.internal-link target=_blank} werden Sie lernen, was ein "Passwort-Hash" ist. @@ -249,4 +249,4 @@ In diesem Fall können Sie `typing.Dict` verwenden (oder nur `dict` in Python 3. Verwenden Sie gerne mehrere Pydantic-Modelle und vererben Sie je nach Bedarf. -Sie brauchen kein einzelnes Datenmodell pro Einheit, wenn diese Einheit verschiedene Zustände annehmen kann. So wie unsere Nutzer-"Einheit", welche einen Zustand mit `password`, einen mit `password_hash` und einen ohne Passwort hatte. +Sie brauchen kein einzelnes Datenmodell pro Einheit, wenn diese Einheit verschiedene Zustände annehmen kann. So wie unsere Benutzer-"Einheit", welche einen Zustand mit `password`, einen mit `password_hash` und einen ohne Passwort hatte. From 72a64343cee4d3d23ca237dfab87a7161d78f7ed Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Sun, 29 Oct 2023 04:56:39 +0100 Subject: [PATCH 07/14] Use typographic quotes --- docs/de/docs/tutorial/extra-models.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index b2c98a3f30912..4b09a098c256d 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -6,12 +6,12 @@ Insbesondere Benutzer-Modelle, denn: * Das **hereinkommende Modell** sollte ein Passwort haben können. * Das **herausgehende Modell** sollte kein Passwort haben. -* Das **Datenbank-Modell** sollte wahrscheinlich ein gehashtes Passwort haben. +* Das **Datenbank-Modell** sollte wahrscheinlich ein gehashtes Passwort haben. !!! danger "Gefahr" - Speichern Sie niemals das Klartext-Passwort eines Benutzers. Speichern Sie immer den "sicheren Hash", den Sie verifizieren können. + Speichern Sie niemals das Klartext-Passwort eines Benutzers. Speichern Sie immer den „sicheren Hash“, den Sie verifizieren können. - Falls Ihnen das nichts sagt, in den [Sicherheits-Kapiteln](security/simple-oauth2.md#passwort-hashing){.internal-link target=_blank} werden Sie lernen, was ein "Passwort-Hash" ist. + Falls Ihnen das nichts sagt, in den [Sicherheits-Kapiteln](security/simple-oauth2.md#passwort-hashing){.internal-link target=_blank} werden Sie lernen, was ein „Passwort-Hash“ ist. ## Mehrere Modelle @@ -70,7 +70,7 @@ bekommen wir ein Python `dict`: #### Ein `dict` entpacken -Wenn wir ein `dict` wie `user_dict` nehmen, und es einer Funktion (oder Klassenmethode) mittels `**user_dict` übergeben, wird Python es "entpacken". Es wird die Schlüssel und Werte von `user_dict` direkt als Schlüsselwort-Argumente übergeben. +Wenn wir ein `dict` wie `user_dict` nehmen, und es einer Funktion (oder Klassenmethode) mittels `**user_dict` übergeben, wird Python es „entpacken“. Es wird die Schlüssel und Werte von `user_dict` direkt als Schlüsselwort-Argumente übergeben. Wenn wir also das `user_dict` von oben nehmen und schreiben: @@ -115,7 +115,7 @@ UserInDB(**user_dict) UserInDB(**user_in.dict()) ``` -... weil `user_in.dict()` ein `dict` ist, und dann lassen wir Python es "entpacken", indem wir es `UserInDB` übergeben, mit vorangestelltem `**`. +... weil `user_in.dict()` ein `dict` ist, und dann lassen wir Python es „entpacken“, indem wir es `UserInDB` übergeben, mit vorangestelltem `**`. Wir erhalten also ein Pydantic-Modell aus den Daten eines anderen Pydantic-Modells. @@ -249,4 +249,4 @@ In diesem Fall können Sie `typing.Dict` verwenden (oder nur `dict` in Python 3. Verwenden Sie gerne mehrere Pydantic-Modelle und vererben Sie je nach Bedarf. -Sie brauchen kein einzelnes Datenmodell pro Einheit, wenn diese Einheit verschiedene Zustände annehmen kann. So wie unsere Benutzer-"Einheit", welche einen Zustand mit `password`, einen mit `password_hash` und einen ohne Passwort hatte. +Sie brauchen kein einzelnes Datenmodell pro Einheit, wenn diese Einheit verschiedene Zustände annehmen kann. So wie unsere Benutzer-„Einheit“, welche einen Zustand mit `password`, einen mit `password_hash` und einen ohne Passwort hatte. From 921eac7afc5d9dbba50a04d2ecdcc3320263b478 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Fri, 10 Nov 2023 02:46:15 +0100 Subject: [PATCH 08/14] "Kindklasse" -> "Unterklasse" --- docs/de/docs/tutorial/extra-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index 4b09a098c256d..c4f1e365486a4 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -152,7 +152,7 @@ Unsere Modelle teilen alle eine Menge der Daten und verdoppeln Attribut-Namen un Das können wir besser machen. -Wir deklarieren ein `UserBase`-Modell, das als Basis für unsere anderen Modelle dient. Dann können wir Kindklassen erstellen, die seine Attribute (Typ-Deklarationen, Validierungen, usw.) erben. +Wir deklarieren ein `UserBase`-Modell, das als Basis für unsere anderen Modelle dient. Dann können wir Unterklassen erstellen, die seine Attribute (Typ-Deklarationen, Validierungen, usw.) erben. Die ganze Daten-Konvertierung, -Validierung, -Dokumentation, usw. wird immer noch wie gehabt funktionieren. From 89a6790457b436f9e3e689e7eb81742260274363 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Sat, 11 Nov 2023 02:39:07 +0100 Subject: [PATCH 09/14] "Standard " -> "Standard-" --- docs/de/docs/tutorial/extra-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index c4f1e365486a4..f82ed88e74d3b 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -176,7 +176,7 @@ Sie können deklarieren, dass eine Response eine `typing.Union`: +Um das zu tun, verwenden Sie Pythons Standard-Typ-Hinweis `typing.Union`: !!! note "Hinweis" Listen Sie, wenn Sie eine `Union` definieren, denjenigen Typ zuerst, der am spezifischsten ist, gefolgt von den weniger spezifischen Typen. Im Beispiel oben, in `Union[PlaneItem, CarItem]` also den spezifischeren `PlaneItem` vor dem weniger spezifischen `CarItem`. From e4afcd9928ca534af983ed7942a876605592b77f Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Wed, 15 Nov 2023 08:14:22 +0100 Subject: [PATCH 10/14] "Python " -> "Python-", etc. --- docs/de/docs/tutorial/extra-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index f82ed88e74d3b..da0e71868d04a 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -57,7 +57,7 @@ Wenn wir es ausgeben: print(user_dict) ``` -bekommen wir ein Python `dict`: +bekommen wir ein Python-`dict`: ```Python { From 13d462c2019d2cada40e05281ab1098201bc8f27 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Sun, 3 Dec 2023 04:07:52 +0100 Subject: [PATCH 11/14] "Modell-Objekt" -> "Modellobjekt" --- docs/de/docs/tutorial/extra-models.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index da0e71868d04a..1e0e43af1302e 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -49,7 +49,7 @@ und wir rufen seine `.dict()`-Methode auf: user_dict = user_in.dict() ``` -dann haben wir jetzt in der Variable `user_dict` ein `dict` mit den gleichen Daten (es ist ein `dict` statt eines Pydantic-Modell-Objekts). +dann haben wir jetzt in der Variable `user_dict` ein `dict` mit den gleichen Daten (es ist ein `dict` statt eines Pydantic-Modellobjekts). Wenn wir es ausgeben: From e801d16af2002e6a9ca22f1058e807793ceb42a5 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Fri, 8 Dec 2023 07:56:13 +0100 Subject: [PATCH 12/14] "-Modell" -> "modell" --- docs/de/docs/tutorial/extra-models.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index 1e0e43af1302e..d7835ac61583d 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -1,12 +1,12 @@ -# Extra-Modelle +# Extramodelle Fahren wir beim letzten Beispiel fort. Es gibt normalerweise mehrere zusammengehörende Modelle. -Insbesondere Benutzer-Modelle, denn: +Insbesondere Benutzermodelle, denn: * Das **hereinkommende Modell** sollte ein Passwort haben können. * Das **herausgehende Modell** sollte kein Passwort haben. -* Das **Datenbank-Modell** sollte wahrscheinlich ein gehashtes Passwort haben. +* Das **Datenbankmodell** sollte wahrscheinlich ein gehashtes Passwort haben. !!! danger "Gefahr" Speichern Sie niemals das Klartext-Passwort eines Benutzers. Speichern Sie immer den „sicheren Hash“, den Sie verifizieren können. From 62f37a757255d450a057400cb302005a2f5ce298 Mon Sep 17 00:00:00 2001 From: Nils Lindemann Date: Thu, 28 Dec 2023 20:56:03 +0100 Subject: [PATCH 13/14] Remove "-" --- docs/de/docs/tutorial/extra-models.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/de/docs/tutorial/extra-models.md b/docs/de/docs/tutorial/extra-models.md index d7835ac61583d..dcc4f0337b8c3 100644 --- a/docs/de/docs/tutorial/extra-models.md +++ b/docs/de/docs/tutorial/extra-models.md @@ -152,9 +152,9 @@ Unsere Modelle teilen alle eine Menge der Daten und verdoppeln Attribut-Namen un Das können wir besser machen. -Wir deklarieren ein `UserBase`-Modell, das als Basis für unsere anderen Modelle dient. Dann können wir Unterklassen erstellen, die seine Attribute (Typ-Deklarationen, Validierungen, usw.) erben. +Wir deklarieren ein `UserBase`-Modell, das als Basis für unsere anderen Modelle dient. Dann können wir Unterklassen erstellen, die seine Attribute (Typdeklarationen, Validierungen, usw.) erben. -Die ganze Daten-Konvertierung, -Validierung, -Dokumentation, usw. wird immer noch wie gehabt funktionieren. +Die ganze Datenkonvertierung, -validierung, -dokumentation, usw. wird immer noch wie gehabt funktionieren. Auf diese Weise beschreiben wir nur noch die Unterschiede zwischen den Modellen (mit Klartext-`password`, mit `hashed_password`, und ohne Passwort): @@ -176,7 +176,7 @@ Sie können deklarieren, dass eine Response eine `typing.Union`: +Um das zu tun, verwenden Sie Pythons Standard-Typhinweis `typing.Union`: !!! note "Hinweis" Listen Sie, wenn Sie eine `Union` definieren, denjenigen Typ zuerst, der am spezifischsten ist, gefolgt von den weniger spezifischen Typen. Im Beispiel oben, in `Union[PlaneItem, CarItem]` also den spezifischeren `PlaneItem` vor dem weniger spezifischen `CarItem`. @@ -197,15 +197,15 @@ Um das zu tun, verwenden Sie Pythons Standard-Typ-Hinweis