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

Min*_* Oo 5 python api flask eve

我目前正在学习python eve框架和mongoDB数据库,以进行宁静的API开发.在前夕,只有通过在settings.py文件中定义模式才能完成基本的CRUD操作.客户端可以发送GET/POST方法,并根据预定义的模式将数据自动存储到mongoDB中.

如果我想在将数据插入mongoDB之前对其进行预处理(例如:客户端仅发送产品数量和价格,然后服务器计算总数量并将产品,价格和数量存储到数据库中),该怎么办?如果我想在响应客户端之前处理我的数据,该怎么办?我们应该使用烧瓶控制器方法(如此EVE - 定义自定义烧瓶控制器)并手动将数据存储到数据库中吗?

gcw*_*gcw 6

你在这里问两件事。

首先,如果您想在响应 GET 请求之前操作已经存储的数据,您需要的是on_fetched_resource_<resource_name>数据库on_fetched_item_<resource_name>事件挂钩。您可以在返回之前将所需的信息添加到响应中:

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

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()    
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档:http ://python-eve.org/features.html#post-request-event-hooks

但是,如果您想在将 POST 数据存储到数据库之前处理 POST 数据,则需要on_insert_<resource_name>数据库事件挂钩。您可以在将资源保存到数据库之前将所需的信息添加到其中:

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

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

app = Eve()
app.on_insert_item += add_sum
Run Code Online (Sandbox Code Playgroud)