你在这里问两件事。
首先,如果您想在响应 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()
在此处查看文档:http://python-eve.org/features.html#post-request-event-hooks
但是,如果您想在存储到数据库之前处理 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