在python-eve中内部提交请求(POST)

3 投票
1 回答
2254 浏览
提问于 2025-04-17 20:54

我在eve中有一个资源,比如叫ABC。当我在向ABC发布一个新项目时,如果满足某些条件,我想对另一个资源BCD进行一些操作。我知道我可以在发布ABC之前或之后设置一个事件,但有没有一种“内部”的方式可以直接对BCD进行操作,而不需要再通过HTTP请求?

1 个回答

7

在你的回调函数中,你可以选择以下两种方式:

A) 使用数据驱动程序直接把数据存储到数据库里。

像这样:

def update_ABC(request, payload):    
    accounts = app.data.driver.db['abc_collection']
    account = accounts.insert(docs)

app = Eve()
app.on_post_POST_ABC += update_ABC
app.run()

这样就可以了。你这样做是绕过了框架,直接在数据库里存储数据。

B) 使用 app.test_client.post() 通过应用程序直接发送POST请求。

app.test_client().post('/bcd', json.dumps({"field":"value"}, content_type='application_json'))

这个方法可能更好,因为请求是通过框架处理的(像 data_created 这样的元字段会自动处理)。

更新:在 v0.5+ 版本中,你现在可以使用 post_internal 来达到同样的效果。其他CRUD方法也有类似的内部方法可以使用。

撰写回答