4.5 KiB
Verwendung von Datenklassen
FastAPI basiert auf Pydantic und ich habe Ihnen gezeigt, wie Sie Pydantic-Modelle verwenden können, um Requests und Responses zu deklarieren.
Aber FastAPI unterstützt auf die gleiche Weise auch die Verwendung von dataclasses:
{* ../../docs_src/dataclasses/tutorial001.py hl[1,7:12,19:20] *}
Das ist dank Pydantic ebenfalls möglich, da es dataclasses intern unterstützt.
Auch wenn im obige Code Pydantic nicht explizit vorkommt, verwendet FastAPI Pydantic, um diese Standard-Datenklassen in Pydantics eigene Variante von Datenklassen zu konvertieren.
Und natürlich wird das gleiche unterstützt:
- Validierung der Daten
- Serialisierung der Daten
- Dokumentation der Daten, usw.
Das funktioniert genauso wie mit Pydantic-Modellen. Und tatsächlich wird es unter der Haube mittels Pydantic auf die gleiche Weise bewerkstelligt.
/// info
Bedenken Sie, dass Datenklassen nicht alles können, was Pydantic-Modelle können.
Daher müssen Sie möglicherweise weiterhin Pydantic-Modelle verwenden.
Wenn Sie jedoch eine Menge Datenklassen herumliegen haben, ist dies ein guter Trick, um sie für eine Web-API mithilfe von FastAPI zu verwenden. 🤓
///
Datenklassen als response_model
Sie können dataclasses auch im Parameter response_model verwenden:
{* ../../docs_src/dataclasses/tutorial002.py hl[1,7:13,19] *}
Die Datenklasse wird automatisch in eine Pydantic-Datenklasse konvertiert.
Auf diese Weise wird deren Schema in der Benutzeroberfläche der API-Dokumentation angezeigt:
Datenklassen in verschachtelten Datenstrukturen
Sie können dataclasses auch mit anderen Typannotationen kombinieren, um verschachtelte Datenstrukturen zu erstellen.
In einigen Fällen müssen Sie möglicherweise immer noch Pydantics Version von dataclasses verwenden. Zum Beispiel, wenn Sie Fehler in der automatisch generierten API-Dokumentation haben.
In diesem Fall können Sie einfach die Standard-dataclasses durch pydantic.dataclasses ersetzen, was einen direkten Ersatz darstellt:
{* ../../docs_src/dataclasses/tutorial003.py hl[1,5,8:11,14:17,23:25,28] *}
-
Wir importieren
fieldweiterhin von Standard-dataclasses. -
pydantic.dataclassesist ein direkter Ersatz fürdataclasses. -
Die Datenklasse
Authorenthält eine Liste vonItem-Datenklassen. -
Die Datenklasse
Authorwird imresponse_model-Parameter verwendet. -
Sie können andere Standard-Typannotationen mit Datenklassen als Requestbody verwenden.
In diesem Fall handelt es sich um eine Liste von
Item-Datenklassen. -
Hier geben wir ein Dictionary zurück, das
itemsenthält, welches eine Liste von Datenklassen ist.FastAPI ist weiterhin in der Lage, die Daten nach JSON zu serialisieren.
-
Hier verwendet das
response_modelals Typannotation eine Liste vonAuthor-Datenklassen.Auch hier können Sie
dataclassesmit Standard-Typannotationen kombinieren. -
Beachten Sie, dass diese Pfadoperation-Funktion reguläres
defanstelle vonasync defverwendet.Wie immer können Sie in FastAPI
defundasync defbeliebig kombinieren.Wenn Sie eine Auffrischung darüber benötigen, wann welche Anwendung sinnvoll ist, lesen Sie den Abschnitt „In Eile?“ in der Dokumentation zu
asyncundawait{.internal-link target=_blank}. -
Diese Pfadoperation-Funktion gibt keine Datenklassen zurück (obwohl dies möglich wäre), sondern eine Liste von Dictionarys mit internen Daten.
FastAPI verwendet den Parameter
response_model(der Datenklassen enthält), um die Response zu konvertieren.
Sie können dataclasses mit anderen Typannotationen auf vielfältige Weise kombinieren, um komplexe Datenstrukturen zu bilden.
Weitere Einzelheiten finden Sie in den Bemerkungen im Quellcode oben.
Mehr erfahren
Sie können dataclasses auch mit anderen Pydantic-Modellen kombinieren, von ihnen erben, sie in Ihre eigenen Modelle einbinden, usw.
Weitere Informationen finden Sie in der Pydantic-Dokumentation zu Datenklassen.
Version
Dies ist verfügbar seit FastAPI-Version 0.67.0. 🔖