2014-03-05 19 views
3

我在前夕有一個資源,例如ABC,我想操縱其他資源,例如BCD當某些條件在我向ABC發佈新項目時遇到一些情況時,我知道我可以將事件掛接到post/pre_POST_ABC,但是有沒有一種「內部」方式可以在BCD上進行發佈,而無需再次通過HTTP?在python-eve內部提交請求(發佈)

回答

7

在你的回調函數,你既可以:)

一個使用數據驅動器直接存儲數據到數據庫

事情是這樣的:

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方法也有相同的內部方法可用。

+0

選項2正是我正在尋找的,但它似乎並沒有工作? app.post是一個「實例」類型,而不是一個func? – John

+0

我也嘗試做requests.post(網址,數據,頭文件),但它是凍結前夕....但使用請求並不理想,因爲會有一些HTTP開銷。最好是打電話給一些前夕的內部功能來完成這個職位? – John

+0

我意識到,@ nicola-iarocci,我可以做eve.methods.post,但是通過這種方法,一些相關的事件掛鉤不再起作用,例如, on_post_POST_BCD沒有被觸發,你能否提供建議?謝謝 – John