2013-04-29 130 views
17

我想圍繞像Django一樣的AngularJS客戶端框架包裝我的頭。有一件事讓我很困惑,就是路由和REST問題。Django,REST和角度路線

我一直在嘗試在線閱讀很多內容,但是文檔是有限的,特別是在Django與Angular(在這裏或那裏的小片段)相結合方面。我知道我需要添加一個像TastyPie這樣的REST框架來在我的應用中創建一個健壯的REST界面,以便Angular插入並獲取資源。 (1)我的服務器端應用程序可以呈現我的單頁應用程序(SPA),角度插入(2)路線中(1)我的服務器端應用程序可以渲染我的單頁應用程序應該加載信息/渲染模板(角度)和從服務器(Django)檢索數據不衝突。就像我有人在我的網站上做site.com/user/1234--該路線與Angular路線和Django路線相關 - 除了一個呈現模板,另一個則根據從中檢索到的內容吐出JSON數據庫/服務器。

另外,通過使用REST api,我是否放棄了使ModelForms與我的模型同步等諸多優點?有沒有什麼方法可以用AngularJS來維護這個,或者我需要看一下AngularJS的替代品。

回答

20

這個問題並非真正具體到Django - 只是瞭解SPA中後端和前端之間的關係。

路由在後端和前端之間不重複。你的Django路線應設立類似:

​​3210

,並且提供了一個單一的全功能HTML的諧音,例如一個路線

/ 

其餘路線將在Angular中定義,例如,

/articles/234 
/blog/date/slug 
... 

是處理那些面向公衆的路線的角度控制器將反過來使$ HTTP調用對API URL,且每個將提供一個角部分。所以沒有重複,沒有重疊。

對於問題的第二部分,您仍然可以在構建API數據時使用Django ORM模型關係,但是,當構建前端時,您將失去所有Django的優點。

如果您正確構建API,那麼在每個視圖中需要的所有數據將完全顯示在Angular在該視圖中消耗的JSON訂閱源中。因此,您將ORM用於後端數據構建,但您不能只是決定在模板中遍歷模型關係,而無需先準備後端數據以爲其提供數據。

是的,這是一種非常不同的思考方式,是的,它比直接使用Django(或Rails)要複雜得多。這是構建Web應用程序而不是網站的成本。

+1

是不是都是建設webapps?客戶端與服務器端?你是什​​麼意思,「這是建立一個網絡應用程序,而不是一個網站的成本。」? – BluePython 2013-09-13 20:09:08

+0

@shacker是否是錯字,而您是指SOA或SPA?如果是SPA,那麼它是爲了什麼?:)無論如何,GREAT ANSWER +1 – andi 2013-11-08 11:52:14

+0

andi - SPA:http://en.wikipedia.org/wiki/Single-page_application – shacker 2013-11-09 17:30:53