一个模仿django表单的python数据契约系统。
pycontract的Python项目详细描述
python的声明性数据协定容器类型
pycontracts当前是内部alpha,尚未准备好供生产使用。
python数据契约(pypi中的pycontracts)是用于在 系统。它松散地基于django表单api以帮助简化采用。一个简单的例子:
from pycontract import DataContract, StringField, NumberField class Person(DataContract): name = StringField() phone = StringField(null=True) age = NumberField(null=True) bob = Person() bob["name"] = "Bob Smith" bob["phone"] = "999-555-1234" bob["age"] = 32
在本例中,声明person的契约,并实例化bob的记录。在 除了基本数据之外,我们还可以添加processors来操作或清除数据 作为validators,验证数据类似于django验证器。
功能
- 可定制的验证(与django验证器兼容)。
- 用于清理和格式化数据的数据处理器。
- 声明性字段定义。
- 强制值分配有助于避免回归错误。
- 根据MIT License授权。
基本用法
第一步是定义一个基本契约。这是通过从pycontract.DataContract继承来完成的。下一个 我们决定每个字段是否需要标准处理。例如,我们可以使用 strip_white_space处理器对每个值调用pythonsstrip。最后我们决定是否有 值上需要的额外验证。例如,确保人名以“a”开头 我们可以使用RegexValidator。因此,有了这些信息,我们可以这样声明这个数据契约:
from pycontract import DataContract, StringField, NumberField, strip_white_space, RegexValidator class Person(DataContract): name = StringField(processors=(strip_white_space,), validators=(RegexValidator(r"[aA].+"),)) phone = StringField(null=True) age = NumberField(null=True)
现在在运行时,我们可以设置值,检查有效的契约,最后访问这些值。想要点什么 像这样:
>>> manny = Person() >>> manny["name"] = "Angel Man " >>> manny["phone"] = "999555-1234" >>> manny["age"] = 22 >>> manny.is_valid() True >>> print manny.name 'Angel Man'
这是早期版本,代码库非常短,因此有关更多信息,请参见代码。源头 代码可以在github找到。