后端不可知的数据建模实体库
springfield的Python项目详细描述
springfield使api数据变得简单。
springfield简化了结构化数据的建模。一旦数据是 经过建模,springfield可以将api响应解析为易于使用的python对象 和类型。它还可以生成相同的结构化数据来生成api 请求。
斯普林菲尔德非常适合:
- restful json api数据结构
- 分析来自csv.DictReader 的csv数据结构
- 将python可以解析的任何内容转换为dict或list转换为 结构化对象
还有一个用于在mongo中使用springfield的助手库:springfield- mongo
快速启动
要定义springfield.Entity,子类 springfield.Entity。通过指定 fields。此库提供以下自描述字段 从:
- IntField
- FloatField
- BooleanField
- StringField
- BytesField
- DateTimeField
- EmailField
- UrlField
- EntityField
- CollectionField
一个简单的例子:
#!/usr/bin/env python from springfield import Entity, fields from springfield.timeutil import utcnow class Bookmark(Entity): uri = fields.UrlField(doc='The bookmark uri.') verified = fields.BooleanField(doc='Whether or not this bookmark URI has been verified to exist.') added = fields.DateTimeField() class User(Entity): id = fields.IntField(doc='Auto-incremented database id.') email = fields.EmailField(doc='The user\'s email address.') bookmarks = fields.CollectionField(fields.EntityField(Bookmark)) created = fields.DateTimeField() if __name__ == '__main__': user = User() user.id = 5 user.email = 'foobar@example.com' user.bookmarks = [ {'uri': 'https://github.com'}, {'uri': 'ftp://google.com', 'verified': True} ] user.created = utcnow() data = user.to_json() # `data` is suitable to return in something like a JSON API. print data # Similarly, `data` can be adapted from a JSON API request body. user = User.from_json(data) print user.email print user.created print user.bookmarks
将打印(json被美化以保护无辜者):
{ "bookmarks":[ { "uri":"https://github.com" }, { "uri":"ftp://google.com", "verified":true } ], "created":"2017-01-25T20:25:54Z", "email":"foobar@example.com", "id":5 } foobar@example.com 2017-01-25 20:47:37+00:00 [<Bookmark {uri: https://github.com}>, <Bookmark {verified: True, uri: ftp://google.com}>]
注意以下几点:
- 并非每个字段都是实体所必需的。这对于稀疏 API的更新。
- springfield将以非破坏性的方式调整类型。
- 您还可以通过调整json来创建实体,这在api中非常方便 边界。
现场验证
springfield在构造实体时进行字段验证,根据 由该实体上的字段定义的类型。例如:
可以通过子类化定义更复杂的字段适应行为。 springfield.fields.Field并实现自己的字段。见 有关springfield.fields.Field的文档了解更多 信息。
建筑文档
要生成文档,请首先安装要求:
现在您可以使用make:
运行测试
要运行测试,请首先安装测试要求:
pip install -r test_requirements.txt
测试可以使用./src/tests/runtests.py:
python src/tests/runtests.py
变更日志
0.8.0
- 增加了对Python3.6+的支持
- 放弃对python<;2.7的支持
0.7.17
- 修复pytest插件的包
0.7.16
- 允许EntityFields使用点式名称类字符串。这样做是为了允许实体中的循环引用可以相互引用。
- 添加bytesfield
0.7.15
错误修复
- 允许url为空值