2013-04-29 135 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