我通过在我的 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/

10-11 21:11