3
我在前夕有一個資源,例如ABC,我想操縱其他資源,例如BCD當某些條件在我向ABC發佈新項目時遇到一些情況時,我知道我可以將事件掛接到post/pre_POST_ABC,但是有沒有一種「內部」方式可以在BCD上進行發佈,而無需再次通過HTTP?在python-eve內部提交請求(發佈)
我在前夕有一個資源,例如ABC,我想操縱其他資源,例如BCD當某些條件在我向ABC發佈新項目時遇到一些情況時,我知道我可以將事件掛接到post/pre_POST_ABC,但是有沒有一種「內部」方式可以在BCD上進行發佈,而無需再次通過HTTP?在python-eve內部提交請求(發佈)
在你的回調函數,你既可以:)
一個使用數據驅動器直接存儲數據到數據庫
事情是這樣的:
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方法也有相同的內部方法可用。
選項2正是我正在尋找的,但它似乎並沒有工作? app.post是一個「實例」類型,而不是一個func? – John
我也嘗試做requests.post(網址,數據,頭文件),但它是凍結前夕....但使用請求並不理想,因爲會有一些HTTP開銷。最好是打電話給一些前夕的內部功能來完成這個職位? – John
我意識到,@ nicola-iarocci,我可以做eve.methods.post,但是通過這種方法,一些相關的事件掛鉤不再起作用,例如, on_post_POST_BCD沒有被觸發,你能否提供建議?謝謝 – John