Django、REST 和 Angular 路由

Posted

技术标签:

【中文标题】Django、REST 和 Angular 路由【英文标题】:Django, REST and Angular Routes 【发布时间】:2013-04-23 17:35:27 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

这个问题并不是真正特定于 Django - 只是了解 SPA 中后端和前端之间的关系。

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

/api/foo
/api/bar
...

和一个 single 路由,该路由提供一个 single 页面,其中包含 html 部分,例如

/

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

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

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

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

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

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

【讨论】:

不是都用于构建 webapps 吗?客户端与服务器端? “这是构建网络应用程序而不是网站的成本”是什么意思? @shacker 是错字吗,你是说 SOA 还是 SPA?如果是 SPA,那么它代表什么?:) 无论如何,很好的答案 +1

以上是关于Django、REST 和 Angular 路由的主要内容,如果未能解决你的问题,请参考以下文章

python-django rest framework框架之路由

如何使用 django rest 框架和 angular 上传图片?

Angular 2 前端 django 2 REST 框架后端用户身份验证

与 Django rest 和 Angular/Cli 的条带集成

使用 angular 向 django-rest 发送 DELETE 请求被解释为 OPTIONS

未提供 Angular + Django REST 身份验证凭据