marshmallow ?
Diese Bibliothek. Schemabibliothek.
Lesen Sie den Schnellstart
Es ist sehr detailliert geschrieben, daher ist es gut, es zu lesen.
Die grobe Verwendung ist wie folgt (Schnellstart ist detaillierter).
from marshmallow import Schema, fields
#Schemadefinition
class Perseon(Schema):
name = fields.String()
age = fields.Integer()
# load(json.Ladeähnliches Bild)
data, errs = Person().load({"name": "foo", "age": "10"})
# dump
dumped, errs = Person().dump(data)
Der von load ()
, dump ()
zurückgegebene Wert ist ein benanntes Tupel mit data, error
als Wert. Sie können also auch "Person.dump (data) .data" usw. schreiben.
strict mode
Standardmäßig tritt kein Fehler auf, selbst wenn die Validierung abgefangen wird. Aktivieren Sie den strengen Modus, um einen Fehler zu machen.
Person(strict=True).load({})
Beachten Sie die folgenden Punkte
required = True
muss explizit hinzugefügt werden, um erforderlich zu sein
--default dump update_fields = True
Persönlich ist true für die Standardeinstellung gut, daher setze ich in Meta im Grunde genommen strict = True.
class Person(Schema):
name = fields.String()
class Meta:
strict = True
Person().load({}) # marshmallow.ValidationError
Wenn Sie den Strict entfernen möchten, übergeben Sie explizit strict = False
.
data, err = Person(strict=False).load({})
Werte, die in der Schemadefinition nicht vorhanden sind, werden automatisch gelöscht. Beachten Sie, dass Sie die erforderlichen Felder fest definieren müssen.
class Person(Schema):
name = fields.String()
data, _ = Person().load({"name": "foo", "age": 20})
print(data) # => {"name": "foo"}
required = True
kann nur benötigt werden, wenn dies ausdrücklich hinzugefügt wurdeDieser Name kann nicht benötigt werden. Sie müssen explizit erforderlich hinzufügen.
class Person(Schema):
name = fields.String()
so was.
class Person(Schema):
name = fields.String(required=True)
Dies gilt auch für die Angabe von Feldern in Meta. Daher können Sie in Meta.fields keine erforderlichen Felder definieren
class Person(Schema):
class Meta:
filds = ("name",)
update_fields = True
Dies ist eine kleine Geschichte. Seien Sie vorsichtig, wenn Sie die Leistung messen möchten. Standardmäßig hat Marshmallow update_fields auf true gesetzt. Dies ist eine Funktion, die den Wert der übergebenen Daten verwendet, um die Behandlung automatisch definierter Typen wie Felder auf nette Weise zu ändern. Nach dem Übergeben einer Zahl ist dies beispielsweise wie bei Feldern. Feld wird zu Feldern. Ganzzahl.
Es ist jedoch praktisch. Es ist ein Prozess, der viel Last erfordert. Wenn Sie also über die Geschwindigkeit besorgt sind, sollten Sie ihn ausschalten. Es scheint, dass es nicht mit Meta angegeben werden kann.
schema.dump(data, update_fields=False)
Wenn Sie ein Problem haben, lesen Sie den Quellcode, um es zu lösen.
Recommended Posts