使用django的丰富JavaScript应用程序

时间:2011-06-27 18:38:05

标签: jquery python django

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

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

的问候,

1 个答案:

答案 0 :(得分:9)

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

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

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

  

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

     

在极端情况下,在我们的例子中,DocumentCloud工作区实际上是一个空体标签,所有HTML渲染和有趣的逻辑都发生在JavaScript模型和视图中 - 您永远不必刷新页面。服务器端Rails代码变得更小,更简单,基本上委托执行验证和身份验证并向客户端提供JSON。想想GMail,或新推特,或280幻灯片...

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

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

    例如,

    pistondjango-tastypie对此有好处。

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

    例如,Backbone.js提供了一个Model原型。您可以扩展它(或子类,如果您正在使用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 - 基于客户端。

我们开始使用我们的最新项目,我个人认为这使得事情更容易管理,更容易使用。

更新:我认为this post在总结保持项目分离的利弊方面做得非常好。

相关问题