【发布时间】:2014-03-05 07:58:16
【问题描述】:
我在前夕有一个资源,例如ABC,我想操纵另一个资源,例如BCD 当我向 ABC 发布新项目时满足某些条件时,我知道我可以为 post/pre_POST_ABC 挂钩事件,但是是否有一种“内部”方式可以在 BCD 上发布而无需再次通过 HTTP?
【问题讨论】:
我在前夕有一个资源,例如ABC,我想操纵另一个资源,例如BCD 当我向 ABC 发布新项目时满足某些条件时,我知道我可以为 post/pre_POST_ABC 挂钩事件,但是是否有一种“内部”方式可以在 BCD 上发布而无需再次通过 HTTP?
【问题讨论】:
在您的回调函数中,您可以:
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 方法也有等效的内部方法。
【讨论】:
app.test_client().post('/bcd', data=json.dumps({"field":"value"}), content_type='application/json')