强制Eve验证自定义路径中的文档

时间:2016-08-23 15:52:30

标签: eve cerberus

在我的python / eve REST API中,我有一个自定义路由,可以执行一些非常简单的处理。我收到了POST请求,经过一些处理后,我将此文档发送到数据库。但如果我能使用Eve使用的相同验证来验证此文档,那将是很好的。我知道我可以直接使用cerberus,但它不会处理我在模式中的data_relation之类的内容。

我可以通过任何方式调用内部Eve验证器吗?

1 个答案:

答案 0 :(得分:1)

您可以使用默认的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()

现在,此示例将在每个文档上返回错误,因为在此阶段,它们包含自动字段,例如_created_updated,这些字段未包含在架构中,但是您获得了想法(您可以通过为验证程序实例设置allow_unknown属性来规避此问题。)