【问题标题】:Force Eve to validate document inside custom route强制 Eve 验证自定义路由中的文档
【发布时间】:2016-08-23 15:52:29
【问题描述】:

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

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

【问题讨论】:

    标签: eve cerberus


    【解决方案1】:

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

    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 属性来规避此问题)。

    【讨论】:

    • 真丢脸!我已经有一个自定义验证器,其中定义了一些自定义类型,但我没想过用它来解决我的问题....谢谢@NicolaIarocci,顺便说一句:Eve 做得很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-19
    • 2021-12-17
    相关资源
    最近更新 更多