在 Eve 的 pre-put 回调中从数据库获取项目信息

Get info of an item from database in pre-put callback in Eve

我有带 subId 的项目和存储在 mongoDB 中的一些其他字段。在提交PUT请求之前,我想检查PUT请求的header中发送的subId是否等于subId存储在 mongoDB 中的所需项目。所以,我决定使用 pre_put_callback 来做这个检查。现在我可以在这个函数中从请求的 header 中获取 subId,但我不知道如何从 mongoDB 中访问项目的 subId,其 _id 由用户提供,作为 pre_put_callback 函数中请求的路径。有没有办法从 pre_put_callback 函数访问该项目的 subId(存储在 MongoDB 中)?

您可以使用 flask 包的 current_app 从预请求事件挂钩(例如 pre_put_callback 访问 MongoDB 数据库的项目。例如,对于 pre_PUT 事件挂钩,可以按如下方式访问它:

from flask import current_app as app
from eve import Eve

def pre_put_callback(resource, request, lookup):
    resource_db = app.data.driver.db[resource]
    item = resource_db.find_one(lookup)
    print("DB Item: ", item)

app = Eve()
app.on_pre_PUT += pre_put_callback

app.run()