1

在我的 python/eve REST API 中,我有一个自定义路由,可以进行一些非常重要的处理。我收到一个 POST 请求,经过一些处理后,我会将此文档发送到数据库。但是,如果我可以使用 Eve 使用的相同验证来验证此文档,那就太好了。我知道我可以直接使用 cerberus,但它不能处理data_relation我在架构中拥有的东西。

有什么方法可以调用内部 Eve 验证器?

4

1 回答 1

1

您可以使用默认的验证器(如果您自定义了它,也可以使用您自己的子类)。以下示例片段使用数据库挂钩(文档在插入数据库之前处理)。

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()

现在,此示例将在每个文档上返回错误,因为在此阶段,它们包括自动字段,例如_createdand _updated,这些字段不包含在架构中,但是您明白了(您可以通过设置allow_unknown验证器的属性来规避此问题实例)。

于 2016-08-24T07:53:46.257 回答