marshmallow ?
Cette bibliothèque. bibliothèque de schémas.
Lire le démarrage rapide
C'est écrit de manière assez détaillée, il est donc bon de le lire.
L'utilisation approximative est la suivante (le démarrage rapide est plus détaillé).
from marshmallow import Schema, fields
#définition de schéma
class Perseon(Schema):
name = fields.String()
age = fields.Integer()
# load(json.Image semblable à une charge)
data, errs = Person().load({"name": "foo", "age": "10"})
# dump
dumped, errs = Person().dump(data)
La valeur retournée par load ()
, dump ()
est un tuple nommé avec data, errors
comme valeur. Vous pouvez donc également écrire Person.dump (data) .data
etc.
strict mode
Par défaut, aucune erreur ne se produit même si la validation est interceptée. Activez le mode strict pour faire une erreur.
Person(strict=True).load({})
Notez les points suivants
--Par défaut, le mode strict est faux
required = True
doit être explicitement ajouté pour être obligatoire
--default dump ʻupdate_fields = True`Personnellement, true est bon pour la valeur par défaut, donc fondamentalement, j'ai mis strict = True dans Meta.
class Person(Schema):
name = fields.String()
class Meta:
strict = True
Person().load({}) # marshmallow.ValidationError
Lorsque vous voulez supprimer le strict, vous passez explicitement strict = False
.
data, err = Person(strict=False).load({})
Les valeurs qui n'existent pas dans la définition de schéma sont automatiquement supprimées. Notez que vous devez définir fermement les champs nécessaires.
class Person(Schema):
name = fields.String()
data, _ = Person().load({"name": "foo", "age": 20})
print(data) # => {"name": "foo"}
required = True
ne peut pas être requis à moins d'être explicitement ajoutéCe nom ne peut pas être requis. Vous devez ajouter explicitement requis.
class Person(Schema):
name = fields.String()
comme ça.
class Person(Schema):
name = fields.String(required=True)
Cela s'applique également lors de la spécification de champs dans Meta. Vous ne pouvez donc pas définir les champs obligatoires dans Meta.fields
class Person(Schema):
class Meta:
filds = ("name",)
Ceci est une petite histoire. Soyez prudent si vous souhaitez évaluer les performances. Par défaut, marshmallow a update_fields défini sur true. C'est une fonction qui utilise la valeur des données transmises pour modifier la gestion des types définis automatiquement tels que les champs d'une manière agréable. Par exemple, après avoir passé un nombre, c'est comme fields.Field devient fields.Integer.
C'est pratique, cependant. C'est un processus qui prend beaucoup de charge, donc si vous êtes préoccupé par la vitesse, vous devriez le désactiver. Il semble qu'il ne puisse pas être spécifié avec meta.
schema.dump(data, update_fields=False)
Si vous rencontrez un problème, lisez le code source pour le résoudre.
Recommended Posts