在python-eve中内部提交请求(POST)
我在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方法也有类似的内部方法可以使用。