Python 从配置文件或数据库读取Colander架构
我在谷歌上搜索了一会儿,但找不到有关如何从配置文件或数据库检索Colander模式的参考。我认为这并不难实现,但我可能忽略了一些东西。也许有人做过或看到过类似的事情,可能会分享一些见解 下面是Colander模式的示例:Python 从配置文件或数据库读取Colander架构,python,schema,pyramid,colander,Python,Schema,Pyramid,Colander,我在谷歌上搜索了一会儿,但找不到有关如何从配置文件或数据库检索Colander模式的参考。我认为这并不难实现,但我可能忽略了一些东西。也许有人做过或看到过类似的事情,可能会分享一些见解 下面是Colander模式的示例: class PageSchema(colander.MappingSchema): title = SchemaNode(String(), title='Page title',
class PageSchema(colander.MappingSchema):
title = SchemaNode(String(),
title='Page title',
description='The title of the page',
)
description = SchemaNode(String(),
title='A short description',
description='Keep it under 60 characters or so',
missing = u'',
validator=colander.Length(max=79)
)
body = colander.SchemaNode(colander.String(),
description='Tell the world',
missing = u'')
colander不支持这一点。在这方面我知道的一件事是“利蒙”方案,它的作用正好相反。它能够从colander模式生成任意python对象。正如micheal所说,它可能不受支持。如果你真的需要的话。这里有一些提示 按名称在数据库中保存模式,例如:“PageSchema”。将其所有记录与所有需要的参数一起保存在数据库中 你必须这样做:
for row in rows:
attrinbutes[row['name']] = build_attribute(row)
schemas[schema_name] = type(schema_name, (colander.MappingSchema,), attributes)
exec('%s = schemas[schema_name]' % schema_name)
换句话说,它加载所有属性并使用类型操作符构建一个类。这种任务非常简单,应该和习惯的类
语法一样有效。exec
调用只是在本地推送名称。您可能会使用locals()[schema\u name]=schmea
甚至其他作用域
这样,如果需要,您可以从任何地方加载模式。你可以自己建造一个工厂,比如:
,如果可能,它将返回一个架构,如果不存在,它将不返回任何架构李>schemas.get('PageSchema')