卡布奇诺,Django,AJAX,并将它们融合在一起 - 回顾我的架构!

mik*_*ana 6 django ajax model-view-controller json cappuccino

我正试图让我的头围绕卡布奇诺.我希望我的StackOverview同行能够回顾下面的架构,看看它是否有意义 - 目的是利用Django和Cappuccino的独特优势,而不会使技术重叠的地方倍增......

当Web浏览器请求"友好"URL(例如,/,/ articles等)时:

  • DJango的urls.py将其与视图相匹配.
  • 视图,而不是使用本地dict填充模板的DJangos典型工作,直接
    返回Cappuccino应用程序中使用的小"存根"HTML.
  • 客户端收到Cappuccino HTML
  • 客户端请求存根HTML中提到的Objective J JS URL
  • 最终用户应用程序在浏览器中执行并显示

浏览器现在有一个工作的应用程序.当用户执行从服务器请求某些内容的操作时:

  • 浏览器将XMLHTTPRequest发送到URL.
  • Django的URLs.py将其与视图相匹配.
  • 视图确实有效,可能与数据库模型交互.但是,Django不是返回模板,而是返回一些JSON.
  • 客户端接收JSON,并做任何需要做的事情.

这有意义吗?我们仍然拥有友好URL的好处,并且为我们创建了为我们的代码建模的数据库.然而,我们提供Cappuccino存根页面和JSON响应,而不是使用模板,以便为用户提供更像真实应用程序的东西,而不像HTML模板引擎.

是否有更好的做事方式?其他Pythonistas使用什么?感谢您的反馈意见.

Kar*_*tin 4

对于低流量站点,使用 Django 的路由层就可以了,但如果您计划获得大量流量,则可以考虑让代理 Web 服务器处理存根。

至于其余的,它是有效的,TurboGears 社区已经这样做了很多年(我是 TG 提交者,所以这就是我通常使用的)。将字典返回到模板的 TG 架构使这变得微不足道,因为您只需将“json”设置为模板引擎。

在 Django 中做同样的事情并不复杂。只需使用序列化工具将结果写入响应,而不是使用模板调用。

请注意,当您构建这样的架构时,如果将所有应用程序逻辑保留在一个位置,管理起来会容易得多。将一些应用程序逻辑放在 Django 中,另一些放在浏览器中会导致事情很快变得混乱。如果您将服务器视为愚蠢的持久层(验证/身份验证/授权除外),那么生活会更容易。

FWIW,如果您对较重的非渐进式增强框架感兴趣,我发现 Sproutcore 比 Cappuccino 更容易使用。