** Ich habe es überhaupt nicht bemerkt, als ich es geschrieben habe, aber jetzt scheint es, dass es zu schematics
verschoben wurde. Ich werde bald die "Schaltplan" -Version schreiben ... vielleicht. ** **.
dictshield
ist eine Bibliothek zum Überprüfen von JSON-Objekten.
Da es nach Klassen definiert werden kann, scheint es einfach zu verwenden zu sein, da es der Modell- und Formularklasse von "Django", die ich normalerweise verwende, der Dokumentklasse "Mongoengine" usw. ähnlich ist und die Codebasis kompakt und die Sichtbarkeit gut ist. Versuch. Während Sie den Code durchgehen, werden anscheinend auch MongoDB und JSON Schema berücksichtigt.
documents.py
from dictshield.document import Document
from dictshield.fields import StringField, IntField, FloatField, BooleanField, DateTimeField
class SampleDocument(Document):
id = IntField(min_value=0)
name = StringField()
gps_attached = BooleanField()
temperature = FloatField()
created_at = DateTimeField()
Durch das Überprüfen von JSON-Objekten wird das JSON-Objekt in "dict" konvertiert und anschließend in die Dokumentklasse geworfen.
import json
json_data = '{"id": 1, "name": "foo", "gps_attached": true, "temperature": 23.5, "created_at": "2013-01-01T12:34:56" }'
data = json.loads(json_data)
document = SampleDocument(**data)
document.validate() #True wird zurückgegeben
Verwenden Sie die Klasse "EmbeddedDocument", um verschachtelte (?) JSON-Objekte zu verwenden. Ein Beispiel für die Trennung der Informationen von Peripheriesensoren.
documents.py
from dictshield.document import Document, EmbeddedDocument
from dictshield.fields import StringField, IntField, FloatField, BooleanField, DateTimeField
from dictshield.fields.compound import EmbeddedDocumentField
class PeripheralEmbeddedDocument(EmbeddedDocument):
gps_attached = BooleanField()
temperature = FloatField()
class SampleDocument(Document):
id = IntField()
name = StringField(max_length=5)
created_at = DateTimeField()
peripheral = EmbeddedDocumentField(PeripheralEmbeddedDocument)
data = {
u'created_at': u'2013-01-01T12:34:56',
u'id': 1,
u'name': u'foo',
u'peripheral': {
u'gps_attached': True,
u'temperature': 23.5
}
}
document = SampleDocument(**data)
document.validate() #True wird zurückgegeben
Wenn die Validierung fehlschlägt, wird eine ShieldException ausgelöst.
data = {
u'created_at': u'2013-01-01T12:34:56',
u'id': 1,
u'name': u'hogheoge', #lange
u'peripheral': {
u'gps_attached': True,
u'temperature': 23.5
}
}
document = SampleDocument(**data)
document.validate()
---------------------------------------------------------------------------
ShieldException Traceback (most recent call last)
<ipython-input-76-8d15894a526a> in <module>()
----> 1 document.validate()
/somewhere/lib/python2.7/site-packages/dictshield/document.pyc in validate(self, validate_all)
333 # NB: raising a ShieldDocException in this case would be more
334 # consistent, but existing code might expect ShieldException
--> 335 raise err
336
337 if errs:
ShieldException: String value is too long - name:hogheoge
Recommended Posts