我通过在我的 eve-API 上执行 POST 请求将新数据添加到我的数据库中。
由于需要从 Python 端添加一些数据,我想我可以使用 pre-request event hook 来添加这些数据。
那么有没有办法在将数据插入数据库之前使用预请求钩子(Hook)修改 POST 请求中包含的数据?我已经了解如何实现这样的钩子(Hook),但对如何在插入数据库之前修改数据没有任何线索。
最佳答案
您可能想查看 database hooks ,特别是 insert hooks :
在下面的代码中:
def before_insert(resource_name, documents):
if resource_name == 'myresource':
for document in documents:
document['field'] = 'value'
app = Eve()
app.on_insert += before_insert
app.run()
每次 POST 命中 API 时,都会调用
before_insert
函数。该函数为每个文档更新 field1
。由于在将有效负载发送到数据库之前调用此回调,因此更改将持久保存到数据库中。一个有趣的选择是:
def before_insert(resource_name, documents):
for document in documents:
document['field'] = 'value'
app = Eve()
app.on_insert_myresource += before_insert
app.run()
在回调中,我们不再测试端点名称。这是因为我们将回调挂接到
on_insert_myresoure
事件,因此只有在 myresource
端点上执行 POST 请求时才会调用该函数。更好的关注点分离,代码更简单,而且性能提高,因为回调不会被所有 API 插入。旁注,最终您可以将多个回调 Hook 到同一事件(因此使用加法运算符 +=
)。关于Python-Eve : Use Pre-Request Event Hooks to modify data before inserting to DB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34118224/