使用 Django(或任何 Web 框架)的 AJAX 的“最佳实践”是啥

Posted

技术标签:

【中文标题】使用 Django(或任何 Web 框架)的 AJAX 的“最佳实践”是啥【英文标题】:What are the "best practices" for AJAX with Django (or any web framework)使用 Django(或任何 Web 框架)的 AJAX 的“最佳实践”是什么 【发布时间】:2010-11-30 13:42:45 【问题描述】:

我正在 Django 中开发一个问题跟踪应用程序,主要用于学习练习,但也用于我自己的项目 - 我正在考虑使用一些 AJAX 来“增强”可用性。例如,允许用户为特定问题“加注星标”,这会将他们添加到他们的监视列表中。这在很多网站中都实现了,并且通常是 AJAX - 因为用户正在查看的 URL 在点击星号时不需要更改。

现在,我想知道从我的 star_unstar 视图返回什么样的响应 - 检测请求是否通过 AJAX 发出。

目前,如果请求是AJAX请求,它只返回星星需要的html部分,所以我可以替换星星的父DIV中的HTML,这样星星出现“on”或“ off”,取决于用户的操作。

但是,我更愿意返回某种 JSON 对象,因为我认为它看起来更“合适”。这种方法的问题是javascript必须修改星形图像的src属性,上面的href,以及链接标题,对于这样一个简单的功能来说,这似乎需要做很多工作。我也在研究未来的内联评论,但我想在开始编写大量 JS 代码之前先了解一下“应该”如何完成。

在实现诸如此类的功能时,不只是使用 Django,而是所有以类似方式运行的框架,普遍的共识是什么?

【问题讨论】:

【参考方案1】:

当我使用 Ajax 时,我主要关心的通常是限制我必须发送的数据量。这种类型的 Ajax 应用程序应该非常敏感(如果可能,不可见)。

在切换星的情况下,我会将实际的开/关状态创建为 CSS 类 StarOn 和 StarOff。客户在第一次访问页面时会同时下载 off 和 on 星,考虑到星是小图像,这是可以接受的。以后想改变星星的外观时,只需要编辑 CSS,完全不用接触 javascript。

至于 Ajax,我会来回发送一件事——一个 JSON 变量 true/false,它表示请求是否成功。只要用户点击星号,我就会将其更改为 StarOn 状态并发送请求。 99% 的时间 Ajax 将返回 true,用户甚至不会意识到 Web 请求中存在某种延迟。在您收到 false 回复的极少数情况下,您必须将星标恢复为 StarOff 并向用户显示错误消息。

【讨论】:

我确实认为这是一种可行的方法,而且它现在看起来是最明智的方法。感谢您的帮助!【参考方案2】:

正如您在最后指出的那样,我认为您的问题与 Django 或 Python 无关。

您是否返回 HTML 的 blob 以写入 DOM 或将一些序列化数据作为 JSON 返回有很多个人偏好。不过,您可能需要考虑一些实际因素。

HTML 的优点: - 轻松快速地直接写入页面。

JSON 的优点: - 不耦合到应用程序的前端。如果您在应用程序的其他任何地方需要该功能,它就可以使用。

我的呼吁。它只是相对微不足道的 HTML 更新量,在这种情况下,我可能会选择返回 JSON,并为自己提供额外的灵活性,这在未来可能会有用。

【讨论】:

确实有道理。我目前有一个视图(如建议的那样)来切换星号,但我可能会将其更改为两个单独的视图,星号和取消星号。

以上是关于使用 Django(或任何 Web 框架)的 AJAX 的“最佳实践”是啥的主要内容,如果未能解决你的问题,请参考以下文章

Django基础和基本使用

扭曲(异步服务器)与Django(或任何其他框架)

Django的使用

用于网络中大型项目的 Django 或 C++ 网络框架(例如,WT)[关闭]

运行 Django 或任何其他基于 python 的网络框架的最低配置或交钥匙网络服务器?

29Python之Web框架Django入门