19

我正在尝试将 AngularJS 之类的客户端框架与 Django 结合起来。真正让我困惑的一件事是路由和 REST 的问题。

我一直试图在网上阅读很多关于它的信息,但文档是有限的,特别是在 Django 与 Angular 结合方面(这里或那里的小片段)。我知道我需要添加一个像 TastyPie 这样的 REST 框架来在我的应用程序中创建一个健壮的 REST 接口,以便 Angular 插入并获取资源。

但是,我很困惑如何正确映射我的路线,以便(1)我的服务器端应用程序可以呈现我的单页应用程序(SPA),并插入有角度的(2)应该的路线加载信息/渲染模板(角度)和从服务器(django)检索数据不冲突。就像我有人在我的网站上做 site.com/user/1234 一样——该路由与 Angular 路由和 Django 路由相关联——除了一个渲染模板,另一个根据从中检索到的内容吐出 JSON数据库/服务器。

此外,通过使用 REST api,我是否放弃了在将 ModelForms 与我的模型同步等方面的许多优势?有什么方法可以用 AngularJS 来维护它,还是我必须寻找一个 AngularJS 替代品。

4

1 回答 1

23

这个问题并不是 Django 所特有的——只是了解 SPA 中后端和前端之间的关系。

后端和前端之间的路由不重复。您的 Django 路由应设置如下:

/api/foo
/api/bar
...

和一个单一的路线,提供一个完整的 HTML 部分页面,例如

/

其余的路线将在 Angular 中定义,例如

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

处理这些面向公众的路由的 Angular 控制器将依次对 API URL 进行 $http 调用,每个控制器都将提供一个 Angular 部分。所以没有重复,没有重叠。

对于您问题的第二部分,您仍然可以在构建 API 数据时使用 Django ORM 模型关系,但是是的,在构建前端时您将失去所有 Django 的优点。

如果您正确构建 API,则每个视图中所需的所有数据都将完全呈现在 Angular 在该视图中使用的 JSON 提要中。因此,您使用 ORM 进行后端数据构建,但您不能在不先准备后端数据为其提供数据的情况下,就决定在模板中遍历模型关系。

是的,这是一种非常不同的思考方式,是的,它比直接使用 Django(或 Rails)要复杂得多。这就是构建 Web 应用程序而不是网站的成本。

于 2013-04-30T06:12:18.360 回答