2012-10-11 70 views
0

我有一個裝有Tastypie和REST風格的Django,它不容易將不同類型的對象組合在一起,所以我想如果可以提供一個特殊的視圖來組合多個REST url的響應放入一個更大的JSON對象並返回給客戶端。該URL可能看起來像,在Django中僞造一個請求

的http:// domain.com/combined_view/P = {REST URL 1 ...} & P = {REST URL 2 ...} & P = {休息URL 3 ...}

和返回的JSON將是,

[{其餘URL 1的響應...},其餘URL 2的 {響應...},{ 其餘網址3的響應...}, ... ]

問題是,在一個普通的django視圖中,我該如何僞造一個請求對象,並將其處理成一個響應對象?謝謝。

回答

0

從您的視圖中調用您自己的RESTful API是浪費資源。直接使用數據庫ORM訪問對象。

也不相關的資源/對象應該沒有組合在一起。如果你認爲模型應該結合在一起,那麼你的模型可能需要照顧它,並且將這兩者結合起來。

爲了直接回答您的問題,您可以使用httplib2來調用您的網址並解析響應。

+0

這樣的頁面的一個例子是包含橫幅和文章列表的本地視圖,它們彼此沒有關係。在Django中,它們有不同的模塊。所以我發現使用類似代理的東西在一個請求中獲取它們是有意義的。使用httplib2是可以的,但Django處於一個很好的鬆散耦合設計之下,我猜可能僞造一個請求並獲得響應。如果我錯了,請糾正我。 –

+0

您是否看過模板繼承(https://docs.djangoproject.com/zh/dev/topics/templates/#custom-libraries-and-template-inheritance)橫幅? Restful接口不是真的打算從視圖內部調用。這是糟糕的設計。 –

0

我強烈建議你重新考慮一下你所做的事情,因爲無論我們在這裏給你的答案是否會直接違背REST接口的資源性設計。

如果你有FooBarBaz模型,你爲他們創造等價的資源,這是不可能的產生,那將返回Foo混合收集的請求,BarBaz資源,除非這些合資嵌套資源關係。

您不是以足智多謀的方式思考或不需要,但肯定不會將RESTful體系結構變成他們沒有設計的東西。

+0

感謝您的評論。我同意看圖不寧靜,但它只是被認爲是幫助減少某些讀取請求的請求時間的代理,這可能對移動設備有很大幫助。其他方面,它需要發送幾個請求來爲移動頁面提供數據。從邏輯上講,它仍然是寧靜的界面。 –

+0

如果你沿着這條路走下去,爲什麼要創建一個單獨的請求呢?爲什麼不只是在最初的HTML響應中轉儲JSON數據? –