Django下的丰富JavaScript应用程序

4 投票
1 回答
1429 浏览
提问于 2025-04-16 20:23

我正在开发一个Django应用程序,并且会大量使用JavaScript,特别是jQuery。当我使用比较复杂的JavaScript时,我需要在运行时传递一些变量,同时我希望我的代码保持整洁,不想使用内联JavaScript。

我第一个问题是:有没有什么好的方法来管理随着时间推移而增加的JavaScript库?我的第二个问题是,我在考虑在我的项目中创建一个应用,并托管带有.js扩展名的模板,然后用JavaScript的MIME类型来渲染视图。这这样做是否是个好主意?

祝好,

1 个回答

9

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

我觉得你应该看看一些在客户端实现模型-视图-控制器(MVC)模式的JavaScript框架(如果你还没看过的话)。

这里有一段来自于关于其中一个框架 backbone.js 的讨论的引用。我觉得这和你关于管理JavaScript库的问题很相关。

<...> 如果你的应用程序有很多JavaScript交互,或者是一个单页应用程序,整个界面都是由JavaScript驱动的(我们就是这种情况),那么把你的客户端代码结构化得比仅仅使用jQuery更有力度是很有帮助的。

在我们极端的情况下,DocumentCloud的工作区实际上是一个空的body标签,所有的HTML渲染和有趣的逻辑都发生在JavaScript模型和视图中——你根本不需要刷新页面。服务器端的Rails代码变得更小、更简单,基本上只负责验证、身份验证和向客户端提供JSON数据。想想GMail、新版Twitter或者280 Slides……

是的,提到了Rails,但等等,如果你使用Django(或者Flask,或者任何其他的网络框架),架构是一样的:

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

    piston 或者 django-tastypie 在这方面很不错。

  • 客户端发出必要的AJAX请求来获取数据,显示数据的视图,渲染模板,发出请求来保存数据等等。

    例如,Backbone.js提供了一个模型原型。你可以扩展它(或者如果你使用CoffeeScript,可以子类化),并通过提供相应的tastypie资源的URL来与服务器端模型关联。之后,你就不需要担心同步的问题了:你只需调用my_model.save(),然后Backbone.sync会在后台发出AJAX请求并更新服务器模型实例。

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

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

保持项目的独立性

目前Django并不容易管理重客户端应用程序。你需要自己想办法,比如说,如何组织库。

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

在你的项目中创建一个应用是一个选项,但我觉得这会让事情变得有点复杂。你已经有两个或多或少独立的应用了,那为什么不进一步分开关注点——就直接处理两个真正独立的项目呢?一个项目可以基于Django用于服务器端,另一个,比如说,基于brunch用于客户端。

我们在最新的项目中开始这样做,我个人觉得这让事情更易于管理和处理。

更新:我觉得 这篇文章 对于总结保持项目独立的优缺点做得很好。

撰写回答