zurückmelden.
Sie können das ormar-Modell anstelle eines pydantischen Modells in einem fastapi response_model verwenden.
Natürlich können Sie ormar. Models auch mit pydantic kombinieren, wenn Sie wollen.
Eine der häufigsten Aufgaben bei Antworten besteht darin, bestimmte Felder auszuschließen, die Sie nicht in die Antwortdaten aufnehmen möchten.
Es gibt mehrere Möglichkeiten, dies in ormar zu erreichen, so dass Sie unten Ihre Optionen überprüfen und die auswählen können, die Ihrer Situation am besten entspricht.
Ausschließen der in der Antwort enthaltenen Worte
Auswählen der Wörter
Beachten Sie, dass keines der optionalen Felder erforderlich ist, was bedeutet, dass Sie sowohl in den Antworten als auch in den Anforderungen überspringen können.
Felder werden nicht benötigt, wenn (ein/viele/alle) der folgende Fall vorliegt:
- Felder mit dem Tag nullable = true
- Das Feld hat den Standardwert oder bietet eine Funktion namens default ="Test".
- Das Feld legt den Wert server_default fest. Das* -Feld ist ein Feld mit autoincrement = Trueprimary_key (beachten Sie, dass ormar. Integercrimary_key standardmäßig autoincrement ist).
Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
Im obigen Beispiel sind die Felder id (eine automatisch inkrementelle Ganzzahl) , first \ _ name (mit nullable = True) und class (mit dem Standardwert) optional , können in der Antwort übersprungen werden und das Modell wird weiterhin validiert .
Wenn das Feld leer sein kann , muss es nicht während der Erstellung und in der Antwort in die Nutzlast einbezogen werden , sodass Sie anhand des obigen Beispiels Folgendes tun können :
1 2 3 4 | |
Dies bedeutet , dass , wenn Sie in der Anforderung nicht " ie first \ _ name " übergeben , es ordnungsgemäß überprüft wird (da das Feld optional ist) , in der Datenbank gespeichert wird und einen gespeicherten Datensatz ohne dieses Feld zurückgibt (der ebenfalls verifiziert wird) .
!!!Note Beachten Sie , dass , obwohl Sie keinen Feldwert übergeben , das Feld selbst immer noch im response \ _ model vorhanden ist , was bedeutet , dass es in den Antwortdaten erscheint und auf None gesetzt ist .
1 | |
FastApi Antwort _ix Modell _Ausschlussmöglichkeiten
Fastapi hat eine Antwort \ _ model \ _ exclude , die einen Satz (oder Liste) - Feldnamen akzeptiert .
Dies hat seine Grenzen , da ormar und pydantic auch Dictionaries akzeptieren , in denen Sie ausgeschlossene/include-Spalten setzen können und die auch auf verschachtelten Modellen funktionieren (mehr dazu unten) .
Beachten Sie , dass bei der Verwendung von response \ _ model ein Pflichtfeld nicht ausgeschlossen werden kann , da dies zu einem Fehler bei der Überprüfung führt .
1 2 3 | |
Der obere Teil kann so abgefragt werden :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Beachten Sie , wie das Kennwortfeld im obigen Beispiel vollständig aus den Antwortdaten verschwindet .
1 | |
Verschachteltes Modell ausschließen
Obwohl fastapi nur die Weitergabe einer Gruppe von Feldnamen erlaubt , die einfach ausgeschlossen werden , ist ormar bei der Verwendung von response \ _ model \ _ exclude intelligenter .
In ormar können Sie verschachtelte Modelle mit zwei Arten von Symbolen ausschließen .
Das erste ist ein Wörterbuch mit verschachtelten Feldern , die die Struktur des Modellbaums darstellen , und das zweite ist ein durch zwei Unterstriche getrennter Feldnamenpfad .
Nehmen wir an , dass unsere Benutzerkategorie ein separates Modell ist :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
Wenn Sie die Priorität von den Kategorien in der Antwort ausschließen möchten , können Sie den fastapi-Parameter trotzdem verwenden .
1 2 3 | |
Beachten Sie , dass Sie in ein tieferes Modell mit zwei Unterstrichen einsteigen können , und wenn Sie mehrere Felder von einem verschachtelten Modell ausschließen möchten , müssen Sie ihnen einen vollständigen Pfad voranstellen response_model_exclude={"category__priority", "category__other_field", category__nested_model__nested_model_field} ETC im Beispiel .
!!!Hinweis Um mehr über mögliche Ausschlüsse zu lesen und wie man ein Ausschlusswörterbuch oder eine Einstellung erstellt , besuchen Sie den Abschnitt Felder des Dokuments .
Beachten Sie , dass fastapi zusätzlich zum Parameter response \ _ model \ _ exclude auch andere Parameter unterstützt , die von pydantic geerbt werden und auch für ormar gelten , aber möglicherweise einige Nuancen haben , so dass es am besten ist , den dict-Abschnitt des Dokuments zu lesen .
Model . model _ dump () ausschließen
Alternativ können Sie einfach ein Wörterbuch von ormar . Model zurückgeben und es verwenden .
Auf diese Weise können Sie auch Ausschlüsse/Einschließlich als Wörterbuch festlegen und Felder auf verschachtelten Modellen ausschließen .
!!!Die Warnung , kein response \ _ model zu verwenden , führt dazu , dass API-Dokumente keine Antwortbeispiele und - muster haben , da die Antworten theoretisch jedes beliebige Format haben können .
1 2 3 4 5 | |
!!!Beachten Sie, dass selbst wenn Sie das Kennwortfeld in der Anforderung übergeben, das obige Beispiel das Kennwortfeld ungültig macht, das Feld jedoch weiterhin vorhanden ist, da es Teil des Antwortschemas ist und der Wert auf None festgelegt wird.
Wenn Sie das Feld mit dieser Methode vollständig ausschließen möchten , verwenden Sie einfach nicht response \ _ model und schließen Sie es aus model \ _ dump () aus .
Alternativ können Sie einfach ein Wörterbuch aus dem ormar-Modell zurückgeben , wie dies der Fall ist , und Sie können auch Ausschlüsse/Includes als Wörterbuch festlegen und Felder auf verschachtelten Modellen ausschließen .
!!!Beachten Sie, dass Sie in der Theorie die Antwortvalidierung hier verlieren, aber da Sie auf ormar. Models arbeiten, werden die Antwortdaten bereits nach einer Datenbankabfrage validiert (da das ormar-Modell ein pydantisches Modell ist).
Wenn Sie also response \ _ model vollständig überspringen , können Sie Folgendes tun :
1 2 3 4 | |
!!!Beachten Sie , dass Sie beim Überspringen von response \ _ model auch Pflichtfelder ausschließen können , da die Antwort nach der Rückkehr nicht mehr überprüft wird .
1 | |
Erzeugen eines pydantischen Modells aus einem ormar . Model
Da das Ausschließen von Feldern üblich ist , bietet ormar eine spezielle Möglichkeit , pydantische Modelle aus vorhandenen ormar . Models zu generieren , ohne alle Felder erneut eingeben zu müssen .
Die Methode ist die get _ pydantic () - Methode , die in allen Modellklassen verfügbar ist .
1 2 3 4 5 | |
Um mehr Beispiele zu sehen und mehr zu lesen , besuchen Sie bitte den Abschnitt get _ pydantic der Dokumentation .
Die get _ pydantic-Methode generiert alle Modelle in einem verschachtelten Modellbaum basierend auf Algorithmen , die es ermöglichen , Schleifen in einem Modell zu vermeiden (dieselben Algorithmen , die in model _ dump () , select \ _ all () usw . verwendet werden) .
1 2 3 | |
Eigenständiges Ausleger-Modell
Die endgültige Lösung besteht darin , separate Pydantic-Modelle manuell zu erstellen , die genau wie normale Fastapi-Anwendungen funktionieren , sodass Sie unter anderem unterschiedliche Antworten und Anfragemodelle verwenden können .
Sample sein :
1 2 3 4 5 6 7 8 9 10 11 12 13 | |