强制 Eve 验证自定义路由中的文档
Force Eve to validate document inside custom route
在我的 python/eve REST API 中,我有一个自定义路由来执行一些重要的处理。我收到 POST 请求,经过一些处理后,我会将此文档发送到数据库。但是,如果我可以使用 Eve 使用的相同验证来验证此文档,那就太好了。我知道我可以直接使用 cerberus,但它不处理我的模式中的 data_relation
之类的东西。
有什么方法可以调用内部 Eve 验证器?
您可以使用默认的 Validator(或者您自己的子类,如果您自定义的话)。以下示例片段使用数据库挂钩(文档在数据库插入之前处理)。
from eve.io.mongo import Validator
from flask import current_app
validator = Validator()
def on_insert(resource, documents):
schema = current_app.config['DOMAIN'][resource]['schema']
for document in items:
if not validator(document):
print validator.errors
app = Eve()
app.on_insert += on_insert
if __name__ == '__main__':
app.run()
现在,此示例会在每个文档上出现 return 错误,因为在这个阶段,它们包括 _created
和 _updated
等自动字段,这些字段未包含在模式,但你明白了(你可以通过为验证器实例设置 allow_unknown
属性 来规避这个问题)。
在我的 python/eve REST API 中,我有一个自定义路由来执行一些重要的处理。我收到 POST 请求,经过一些处理后,我会将此文档发送到数据库。但是,如果我可以使用 Eve 使用的相同验证来验证此文档,那就太好了。我知道我可以直接使用 cerberus,但它不处理我的模式中的 data_relation
之类的东西。
有什么方法可以调用内部 Eve 验证器?
您可以使用默认的 Validator(或者您自己的子类,如果您自定义的话)。以下示例片段使用数据库挂钩(文档在数据库插入之前处理)。
from eve.io.mongo import Validator
from flask import current_app
validator = Validator()
def on_insert(resource, documents):
schema = current_app.config['DOMAIN'][resource]['schema']
for document in items:
if not validator(document):
print validator.errors
app = Eve()
app.on_insert += on_insert
if __name__ == '__main__':
app.run()
现在,此示例会在每个文档上出现 return 错误,因为在这个阶段,它们包括 _created
和 _updated
等自动字段,这些字段未包含在模式,但你明白了(你可以通过为验证器实例设置 allow_unknown
属性 来规避这个问题)。