如何在python eve应用程序中进行自定义插入

如何在python eve应用程序中进行自定义插入,python,mongodb,flask,eve,Python,Mongodb,Flask,Eve,我在eve应用程序中有一些定制的flask方法,需要与telnet设备通信并返回结果,但我还想在从该telnet设备检索数据后将数据预填充到一些资源中,如下所示: @app.route("/get_vlan_description", methods=['POST']) def get_vlan_description(): switch = prepare_switch(request) result = dispatch_switch_command(switch, 'get

我在eve应用程序中有一些定制的flask方法,需要与telnet设备通信并返回结果,但我还想在从该telnet设备检索数据后将数据预填充到一些资源中,如下所示:

@app.route("/get_vlan_description", methods=['POST'])
def get_vlan_description():
    switch = prepare_switch(request)
    result = dispatch_switch_command(switch, 'get_vlan_description')

    # TODO: populate vlans resource with result data and return status
My settings.py如下所示:

SERVER_NAME = '127.0.0.1:5000'
DOMAIN = {
    'vlans': {
        'id': {
            'type': 'integer',
            'required': True,
            'unique': True
        },
        'subnet': {
            'type': 'string',
            'required': True
        },
        'description': {
            'type': 'boolean',
            'default': False
        }
    }
}
def telnet_service(resource, documents):
    """ 
        fetch data from telnet device;
        update 'documents' accordingly 
    """
    pass

app = Eve()
app.on_insert += telnet_service

if __name__ == "__main__":
    app.run()
我在查找如何直接访问mongo资源并插入此数据的文档或源代码时遇到困难。

您查看过挂钩了吗?从文件中:

当文档即将存储在数据库中时,会引发插入(资源,文档)上的
和插入(文档)
上的
事件回调函数可以钩住这些事件,任意添加新字段,或编辑现有字段<当
端点被POST请求击中时,会在每个正在更新的资源上引发
on\u insert
,而
on\u insert
则会引发。在这两种情况下,只有当至少一个文档通过验证并将要插入时,才会引发事件<代码>文档
是一个列表,仅包含准备插入的文档(不包括未通过验证的有效负载文档)

所以,如果我得到了你想要的,你可以有这样的东西:

SERVER_NAME = '127.0.0.1:5000'
DOMAIN = {
    'vlans': {
        'id': {
            'type': 'integer',
            'required': True,
            'unique': True
        },
        'subnet': {
            'type': 'string',
            'required': True
        },
        'description': {
            'type': 'boolean',
            'default': False
        }
    }
}
def telnet_service(resource, documents):
    """ 
        fetch data from telnet device;
        update 'documents' accordingly 
    """
    pass

app = Eve()
app.on_insert += telnet_service

if __name__ == "__main__":
    app.run()
请注意,这样您就不必直接处理数据库,因为Eve会处理这些问题

如果您不想存储telnet数据,而只想将其与获取的文档一起发送回,那么可以改为挂接到

最后,如果你真的想使用数据层,你可以使用app.data.driver,如中所示。

你看过挂钩了吗?从文件中:

当文档即将存储在数据库中时,会引发插入(资源,文档)上的
和插入(文档)
上的
事件回调函数可以钩住这些事件,任意添加新字段,或编辑现有字段<当
端点被POST请求击中时,会在每个正在更新的资源上引发
on\u insert
,而
on\u insert
则会引发。在这两种情况下,只有当至少一个文档通过验证并将要插入时,才会引发事件<代码>文档
是一个列表,仅包含准备插入的文档(不包括未通过验证的有效负载文档)

所以,如果我得到了你想要的,你可以有这样的东西:

SERVER_NAME = '127.0.0.1:5000'
DOMAIN = {
    'vlans': {
        'id': {
            'type': 'integer',
            'required': True,
            'unique': True
        },
        'subnet': {
            'type': 'string',
            'required': True
        },
        'description': {
            'type': 'boolean',
            'default': False
        }
    }
}
def telnet_service(resource, documents):
    """ 
        fetch data from telnet device;
        update 'documents' accordingly 
    """
    pass

app = Eve()
app.on_insert += telnet_service

if __name__ == "__main__":
    app.run()
请注意,这样您就不必直接处理数据库,因为Eve会处理这些问题

如果您不想存储telnet数据,而只想将其与获取的文档一起发送回,那么可以改为挂接到


最后,如果您真的想使用数据层,可以使用
app.data.driver
,如所示。

使用post\u internal

用法:


使用post_internal

用法:


谢谢是否可以在同一个钩子期间更改正在写入的资源或写入多个资源?否。我想,除非您直接使用数据驱动程序。使用test_客户端来实现@CarlYoungblood的要求,在其他资源上操作,远程是否可以接受?您可能只需要使用请求或类似的方法,从回调函数中点击其他资源端点即可。谢谢!是否可以在同一个钩子期间更改正在写入的资源或写入多个资源?否。我想,除非您直接使用数据驱动程序。使用test_客户端来实现@CarlYoungblood所要求的,对其他资源进行操作,远程是否可以接受?您可能只需要使用请求或类似的方法,从回调函数中点击其他资源端点。