Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python eve中存储到数据库之前如何处理数据_Python_Api_Flask_Eve - Fatal编程技术网

在python eve中存储到数据库之前如何处理数据

在python eve中存储到数据库之前如何处理数据,python,api,flask,eve,Python,Api,Flask,Eve,我目前正在学习用于restful API开发的python eve框架和mongoDB数据库。在eve中,基本CRUD操作仅通过在settings.py文件中定义模式来完成。客户端可以发送GET/POST方法,数据根据预定义的模式自动存储到mongoDB中 如果我想在将数据插入mongoDB之前对其进行预处理(例如:客户端只发送产品数量和价格,然后服务器计算总金额并将产品、价格和金额存储到数据库中),该怎么办。如果我想在回复客户之前处理我的数据呢。我们是否应该使用flask controller

我目前正在学习用于restful API开发的python eve框架和mongoDB数据库。在eve中,基本CRUD操作仅通过在
settings.py
文件中定义模式来完成。客户端可以发送GET/POST方法,数据根据预定义的模式自动存储到mongoDB中


如果我想在将数据插入mongoDB之前对其进行预处理(例如:客户端只发送产品数量和价格,然后服务器计算总金额并将产品、价格和金额存储到数据库中),该怎么办。如果我想在回复客户之前处理我的数据呢。我们是否应该使用flask controller方法(像这样)并手动将数据存储到数据库中?

您在这里提出了两个问题

首先,如果您想在响应GET请求之前操作已经存储的数据,那么您需要的是在_fetched_resource _上的
和在_fetched_item上的
数据库事件挂钩。在返回响应之前,您可以在响应中添加所需的信息:

当执行GET、POST、PATCH、PUT、DELETE方法时,会同时引发on_POST_uuu和on_POST_uuu事件。您可以使用多个回调函数订阅这些事件。回调将接收访问的资源、原始flask.request对象和响应负载

请参阅此处的文档:

但如果您想在将POST数据存储到数据库之前处理POST数据,您需要的是一个
on\u insert\u
数据库事件挂钩。在将资源保存到数据库之前,您可以在其中添加要添加到资源中的信息:

数据库事件挂钩的工作方式与请求事件挂钩类似。这些事件在数据库操作之前和之后激发。以下是如何配置事件的示例:


非常感谢。这正是我想要的。
def post_get_callback(resource, request, payload):
    print('A GET on the "%s" endpoint was just performed!' % resource)

def post_contacts_get_callback(request, payload):
    print('A get on "contacts" was just performed!')

app = Eve()

app.on_post_GET += post_get_callback
app.on_post_GET_contacts += post_contacts_get_callback

app.run()    
def add_sum(items):
    for item in items:
        item['sum'] = item['a'] + item['b']

app = Eve()
app.on_insert_item += add_sum