|
| 1 | +# Body – Felder |
| 2 | + |
| 3 | +So wie Sie zusätzliche Validation und Metadaten in Parametern der **Pfadoperation-Funktion** mittels `Query`, `Path` und `Body` deklarieren, können Sie auch innerhalb von Pydantic-Modellen zusätzliche Validation und Metadaten deklarieren, mittels Pydantics `Field`. |
| 4 | + |
| 5 | +## `Field` importieren |
| 6 | + |
| 7 | +Importieren Sie es zuerst: |
| 8 | + |
| 9 | +=== "Python 3.10+" |
| 10 | + |
| 11 | + ```Python hl_lines="4" |
| 12 | + {!> ../../../docs_src/body_fields/tutorial001_an_py310.py!} |
| 13 | + ``` |
| 14 | + |
| 15 | +=== "Python 3.9+" |
| 16 | + |
| 17 | + ```Python hl_lines="4" |
| 18 | + {!> ../../../docs_src/body_fields/tutorial001_an_py39.py!} |
| 19 | + ``` |
| 20 | + |
| 21 | +=== "Python 3.8+" |
| 22 | + |
| 23 | + ```Python hl_lines="4" |
| 24 | + {!> ../../../docs_src/body_fields/tutorial001_an.py!} |
| 25 | + ``` |
| 26 | + |
| 27 | +=== "Python 3.10+ nicht annotiert" |
| 28 | + |
| 29 | + !!! tip "Tipp" |
| 30 | + Bevorzugen Sie die `Annotated`-Version, falls möglich. |
| 31 | + |
| 32 | + ```Python hl_lines="2" |
| 33 | + {!> ../../../docs_src/body_fields/tutorial001_py310.py!} |
| 34 | + ``` |
| 35 | + |
| 36 | +=== "Python 3.8+ nicht annotiert" |
| 37 | + |
| 38 | + !!! tip "Tipp" |
| 39 | + Bevorzugen Sie die `Annotated`-Version, falls möglich. |
| 40 | + |
| 41 | + ```Python hl_lines="4" |
| 42 | + {!> ../../../docs_src/body_fields/tutorial001.py!} |
| 43 | + ``` |
| 44 | + |
| 45 | +!!! warning "Achtung" |
| 46 | + Beachten Sie, dass `Field` direkt von `pydantic` importiert wird, nicht von `fastapi`, wie die anderen (`Query`, `Path`, `Body`, usw.) |
| 47 | + |
| 48 | +## Modellattribute deklarieren |
| 49 | + |
| 50 | +Dann können Sie `Field` mit Modellattributen deklarieren: |
| 51 | + |
| 52 | +=== "Python 3.10+" |
| 53 | + |
| 54 | + ```Python hl_lines="11-14" |
| 55 | + {!> ../../../docs_src/body_fields/tutorial001_an_py310.py!} |
| 56 | + ``` |
| 57 | + |
| 58 | +=== "Python 3.9+" |
| 59 | + |
| 60 | + ```Python hl_lines="11-14" |
| 61 | + {!> ../../../docs_src/body_fields/tutorial001_an_py39.py!} |
| 62 | + ``` |
| 63 | + |
| 64 | +=== "Python 3.8+" |
| 65 | + |
| 66 | + ```Python hl_lines="12-15" |
| 67 | + {!> ../../../docs_src/body_fields/tutorial001_an.py!} |
| 68 | + ``` |
| 69 | + |
| 70 | +=== "Python 3.10+ nicht annotiert" |
| 71 | + |
| 72 | + !!! tip "Tipp" |
| 73 | + Bevorzugen Sie die `Annotated`-Version, falls möglich. |
| 74 | + |
| 75 | + ```Python hl_lines="9-12" |
| 76 | + {!> ../../../docs_src/body_fields/tutorial001_py310.py!} |
| 77 | + ``` |
| 78 | + |
| 79 | +=== "Python 3.8+ nicht annotiert" |
| 80 | + |
| 81 | + !!! tip "Tipp" |
| 82 | + Bevorzugen Sie die `Annotated`-Version, falls möglich. |
| 83 | + |
| 84 | + ```Python hl_lines="11-14" |
| 85 | + {!> ../../../docs_src/body_fields/tutorial001.py!} |
| 86 | + ``` |
| 87 | + |
| 88 | +`Field` funktioniert genauso wie `Query`, `Path` und `Body`, es hat die gleichen Parameter, usw. |
| 89 | + |
| 90 | +!!! note "Technische Details" |
| 91 | + Tatsächlich erstellen `Query`, `Path` und andere, die sie kennenlernen werden, Instanzen von Unterklassen einer allgemeinen Klasse `Param`, die ihrerseits eine Unterklasse von Pydantics `FieldInfo`-Klasse ist. |
| 92 | + |
| 93 | + Und Pydantics `Field` gibt ebenfalls eine Instanz von `FieldInfo` zurück. |
| 94 | + |
| 95 | + `Body` gibt auch Instanzen einer Unterklasse von `FieldInfo` zurück. Und später werden Sie andere sehen, die Unterklassen der `Body`-Klasse sind. |
| 96 | + |
| 97 | + Denken Sie daran, dass `Query`, `Path` und andere von `fastapi` tatsächlich Funktionen sind, die spezielle Klassen zurückgeben. |
| 98 | + |
| 99 | +!!! tip "Tipp" |
| 100 | + Beachten Sie, dass jedes Modellattribut mit einem Typ, Defaultwert und `Field` die gleiche Struktur hat wie ein Parameter einer Pfadoperation-Funktion, nur mit `Field` statt `Path`, `Query`, `Body`. |
| 101 | + |
| 102 | +## Zusätzliche Information hinzufügen |
| 103 | + |
| 104 | +Sie können zusätzliche Information in `Field`, `Query`, `Body`, usw. deklarieren. Und es wird im generierten JSON-Schema untergebracht. |
| 105 | + |
| 106 | +Sie werden später mehr darüber lernen, wie man zusätzliche Information unterbringt, wenn Sie lernen, Beispiele zu deklarieren. |
| 107 | + |
| 108 | +!!! warning "Achtung" |
| 109 | + Extra-Schlüssel, die `Field` überreicht werden, werden auch im resultierenden OpenAPI-Schema Ihrer Anwendung gelistet. Da diese Schlüssel nicht notwendigerweise Teil der OpenAPI-Spezifikation sind, könnten einige OpenAPI-Tools, wie etwa [der OpenAPI-Validator](https://validator.swagger.io/), nicht mit Ihrem generierten Schema funktionieren. |
| 110 | + |
| 111 | +## Zusammenfassung |
| 112 | + |
| 113 | +Sie können Pydantics `Field` verwenden, um zusätzliche Validierungen und Metadaten für Modellattribute zu deklarieren. |
| 114 | + |
| 115 | +Sie können auch Extra-Schlüssel verwenden, um zusätzliche JSON-Schema-Metadaten zu überreichen. |
0 commit comments