如何将Django Rest API与BackboneJS前端集成用于单页面应用程序

时间:2015-10-30 20:51:06

标签: django backbone.js django-rest-framework single-page-application

我无法理解使用Django Rest Framework的RESTful API制作单页骨干应用程序时,以下方法的优缺点。

  1. 从Django的模板中渲染整个应用程序。

  2. 从另一台服务器即节点服务器提供骨干应用程序。两台服务器的前端都有nginx。

  3. 从单独的CDN提供HTML /模板和JS。

  4. 需要注意的事项是每个策略中的注意事项。还有其他方法可以将它们捆绑在一起吗?

1 个答案:

答案 0 :(得分:2)

这是一个非常广泛的问题,实际上它与Django或Backbone无关。您真正要问的是“胖客户端”架构与“瘦客户端”架构。换句话说,让您的用户界面在客户端上呈现,而不是在服务器上呈现它。

首先,请允许我回顾一些事情,以确保我们在同一页面上。 “瘦客户端”方法是传统/旧学校模式,Django模型本身就是基于。服务器呈现HTML,将其发送到客户端,每当客户端想要做某事时,它都会将数据发送回服务器并要求提供新的HTML。

相比之下,更现代的“胖客户端”方法让客户端呈现所有UI。每当客户端需要做某事时,它就会向一个(可能是REST-ful)API发出AJAX请求,该API由Django REST Framework等库提供支持。该API只返回相关数据,并将其留给客户端以适当地呈现它。

这两种方法都有优点和缺点,但厚客户端方法正变得越来越流行,因为:

  1. 网络事务更快:因为您的服务器只发送您需要的确切JSON而不是乱七八糟的HTML,响应的“有效负载”要小得多
  2. 您可以“在幕后”获取所有数据;这使得用户看起来更快,并且允许您实现瘦客户端无法实现的UI范例(例如,无限滚动)
  3. 客户端/服务器关系更简单,因为编写服务器代码的人甚至不必考虑HTML或任何其他表示逻辑;他们只关注数据(作为服务器工程师,可能是他们最感兴趣的部分)
  4. 这就是为什么很多公司(包括我为之工作的公司)都放弃了Django,转而使用Django REST Framework提供的API端点。

    所以,如果你想使用厚客户端架构,Django应该永远不会提供除第一个HTML页面之外的任何东西(如果你愿意,甚至可以由ngnix提供,因为它只是静态HTML)。之后,您将使用Backbone.RouterBackbone.Views来呈现您的网站。每当您需要来自服务器的新信息时,您fetch Backbone.ModelBackbone.Collection(其url属性指向您的Django REST Framework端点)。

    我可以证明这整个方法很有效;我工作的网站非常复杂,有许多端点,Backbone + Django REST Framework可以很好地处理它。唯一(稍微)棘手的部分是缓存:在瘦客户端方法中,浏览器会自动为您缓存页面,但由于胖客户端中没有“页面”(只有带数据的AJAX响应),因此没有自动缓存。这意味着,如果您想要缓存数据,则需要自己执行此操作,例如,Backbone.Collection专门用于此目的。

    希望有所帮助。

    P.S。回到当天,Django REST Framework没有按照我们想要的方式处理Django身份验证的东西(即登录/退出),所以我们从Django开始服务另一个页面,即我们的登录页面。但是我很确定当前的Django REST Framework现在能够更好地处理身份验证,所以这对你来说可能不是问题。