Python模型对象验证
我正在写一个接口,这个接口会被两个应用程序使用。这个接口需要用到一些 DoSomethingRequest
和 DoSomethingResponse
类来进行通信。
有没有什么库可以进行模型验证,比如像Django的 Model
那样的?
我基本上想要的是能够说:
对象A必须有一个类型为str()的“text”属性,一个类型为int()的“number”属性,以及一个类型为list()的“items”属性。希望能做到简洁明了。
我在寻找类似下面的东西,或者更好的:
class MyEmbeddedModelClass(EmbeddedModel):
text = TextField(required = True)
class MyModel(Model):
text = TextField(required = True)
number = IntField(default = 0)
items = ListField(EmbeddedModel)
a = MyModel()
a.text = "aaaa"
a.number = 1
a.items = [
MyEmbeddedModelClass("bbbb"),
MyEmbeddedModelClass("cccc"),
MyEmbeddedModelClass("dddd")
]
a.validate()
我知道我可以自己写,但如果有现成的库我更愿意用,因为我对这个还不太熟悉。
3 个回答
0
因为Python是一种动态语言,所以一般的做法是要求一个对象能够表现得像某个特定类的实例,而不是强制它必须是某种特定类型。
在你的代码中,最好是在你需要使用这些属性的地方,尽早确认这个对象确实拥有这些属性,并且这些属性的值是你所期望的。
如果对象o
缺少'someattribute'这个属性,不管它是什么类型,这会引发一个AssertionError
异常:
assert(hasattr(o, 'someattribute'))
此外,如果o.someattribute
不是一个字符串:
assert(isinstance(o.someattribute, basestring))
2
3
如果你想要强制使用接口,或者想要通过设计来确保合同的执行,那么你可能需要使用 zope.interface 这个库。虽然这个名字来源于Zope框架,但实际上它并不依赖于这个框架,外部使用起来也非常方便。