【问题标题】:Rich JavaScript Applications With django使用 django 的丰富的 JavaScript 应用程序
【发布时间】:2011-06-27 18:38:05
【问题描述】:

我正在努力构建一个 django 应用程序,并将使用 JQuery 对大量 JavaScripting 进行中继。当使用繁重的 javascripting 时,我需要在运行时传递一些变量,并试图在没有内联 js 的情况下保持我的代码整洁。

我的第一个问题:对于如何管理随时间构建的 js 库,是否有最佳实践?我的第二个问题,我正在考虑在我的项目中创建一个应用程序并使用 .js 扩展名托管模板,并使用 javascript mime 类型呈现视图。这是一个很好的做法吗?

问候,

【问题讨论】:

  • 你为什么要做第二件事?为什么不只是静态地为您的 JS 提供服务?
  • 抱歉,“在运行时传递一些变量”是什么意思?你是说 AJAX 吗?
  • 我不确定制作.js 模板是个好主意,但我已经用.css 模板做到了。类似<style type="text/css">{% include "stlyes/theme.css" %}</style> 的东西,其中theme.css 是一个Django 模板。非常适合动态主题。

标签: jquery python django


【解决方案1】:

丰富的应用程序:客户端较重,服务器端较轻

我认为,您应该看看在客户端实现某种模型-视图-控制器模式的 JavaScript 框架(如果您还没有这样做的话)。

这是来自discussion 关于其中一个框架backbone.js 的引用。我认为这与您有关 javascript 库管理的问题有关。

<...> 如果您有一个具有大量 JavaScript 交互性的应用程序,或者整个界面由 JavaScript 驱动的单页应用程序(我们就是这种情况),那么它有助于构建您的客户端-side 代码比 jQuery 提供的更有魅力。

极端地说,在我们的例子中,DocumentCloud 工作区实际上是一个空的主体标签,所有的 HTML 呈现和有趣的逻辑都发生在 JavaScript 模型和视图中——您永远不必刷新页面。服务器端的 Rails 代码变得更小、更简单,本质上被委托执行验证和身份验证以及向客户端提供 JSON。想想 GMail、新 Twitter 或 280 张幻灯片……

是的,Rails 被提到了,但是等等,如果你使用 Django(或者 Flask,或者任何 web 框架),架构保持不变:

  • 服务器端实现 API。它基本上提供、接受、验证序列化数据。

    例如,pistondjango-tastypie 对此很有用。

  • 客户端发出必要的 AJAX 请求以检索数据、显示数据视图、呈现模板、发出保存数据的请求等。

    例如,Backbone.js 提供模型原型等。您可以扩展它(或子类,如果您使用的是 CoffeeScript)并通过提供相应 tastypie 资源的 url 来绑定到您的服务器端模型。之后,你就不用担心同步了:你只需my_model.save()Backbone.sync在后台会发出AJAX请求并更新服务器模型实例。

在客户端应用程序中组织文件

我最近开始使用brunch。它基本上为富应用程序提供了一个框架,结合了 CoffeeScript 作为更好的 JavaScript,backbone.js 用于 MVC 类,eco 用于 javascript 模板,stylus 作为 css 预处理器,以及其他好东西(并提供方便的命令行界面: brunch watchbrunch build)。我建议看看早午餐项目中的文件是如何组织的。

保留单独的项目

目前,Django 无法轻松管理繁重的客户端应用程序。你需要弄清楚自己应该如何组织图书馆。

同时,许多最小化和优化脚本和样式表的构建工具(如requirejs)有些难以集成到通常的 Django 项目开发工作流程中。如果您打算创建丰富的 javascript 应用程序,您很可能需要这些工具之一。

在您的项目中创建一个应用程序是一种选择,但我认为这会使事情变得有点复杂。您已经有两个或多或少独立的应用程序,那么为什么不继续进一步分离关注点 - 只需使用两个实际独立的项目?一个项目是基于 Django 的服务器端,另一个项目,例如,brunch-based,用于客户端。

我们从最新的项目开始这样做,我个人认为这使事情更易于管理和使用。

更新:我认为this post 在总结将项目分开的利弊方面做得很好。

【讨论】:

    猜你喜欢
    • 2011-06-15
    • 2013-02-04
    • 2010-11-18
    • 1970-01-01
    • 2011-12-02
    • 2014-11-24
    • 1970-01-01
    • 2014-11-02
    • 2012-01-02
    相关资源
    最近更新 更多