【问题标题】:how to auto-update a Django page only when required?如何仅在需要时自动更新 Django 页面?
【发布时间】:2010-12-24 23:59:55
【问题描述】:

how to update a Django page without a page reload? 中所述,我使用 JavaScript 从浏览器定期向服务器发送 XMLHTTPRequest,以获取在我的应用程序过程中发生变化的网页部分。

然而,大多数时候,什么都没有改变;服务器回复相同的响应,浏览器使用已经存在的内容更新网页。

显然,服务器应该只在有新数据时才回复。

http://ajaxpatterns.org/Periodic_Refresh#Lace 进行了彻底的网络研究,但文档很简洁,我正在努力在我的 Django 项目中实现这个概念。我很难相信以前没有人这样做过。

有人知道我可以用作指导的任何其他资源吗?

【问题讨论】:

  • 你链接的页面有一个很好的技术:对内容进行哈希处理,在响应中包含哈希值,在计时器上将哈希值发送到服务器,并让服务器检查哈希值以确定是否发送更多的东西。您需要哪些方面的帮助?

标签: javascript python ajax django


【解决方案1】:

回答的困难在于不知道返回给用户的服务器端资源是什么。

我会编一些可以作为例子的东西。假设您正在开发一个应用程序,该应用程序允许您实时监控用户在您的站点上制作的 cmets。我们可以做几件事来实现这一点:

  1. 服务器会跟踪添加 cmets 的时间(.created 字段)
  2. 获取最新 cmets 的 API 要求我们指定我们想要的 cmets 的年龄
  3. 视图仅查询并返回自那时以来添加的那些

models.py

class Comment(models.Model):
    text = models.TextField()
    created = models.DateTimeField(default=datetime.now())

urls.py

url(r'^comments/latest/(?P<seconds_old>\d+)/$',get_latest_comments),

views.py

def get_latest_comments(request, seconds_old):
    """
    Returns comments that have been created since the last given number of seconds
    have elapsed.
    """

    # Query comments since the past X seconds
    comments_since = datetime.datetime.now() - datetime.timedelta(seconds=seconds_old)
    comments = Comments.objects.filter(created__gte=comments_since)

    # Return serialized data or whatever you're doing with it
    return HttpResponse(simplejson.dumps(comments),mimetype='application/json')

在客户端,您获取 JSON,检查它是否有值,如果有,请枚举项目,并将新项目添加到您的 &lt;div&gt; 标记或其他任何内容。


如您所见,仅返回最近更新项目的 API 的开发将根据服务器返回的内容而有所不同。

从您的问题看来,您希望服务器管理识别最近更新的内容,而不是客户端(这是一个很好的策略)。在这种情况下,您需要做的是定义:

  1. 服务器将如何跟踪更改(在我的示例中,由“created”字段完成)
  2. 客户将如何请求这些更改
  3. 服务器如何识别发生了哪些更改,以便通过 API 将它们返回给客户端?

【讨论】:

  • 非常感谢您抽出宝贵时间提供如此详细的答案!我认为我的问题是我主要了解这些部分,但看不到它们是如何组合在一起的。我的应用程序现在大部分都在工作,只是一些细节(我可能会在另一个问题中寻求帮助;-)再次感谢!干得好!
猜你喜欢
  • 1970-01-01
  • 2021-07-24
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多