簡體   English   中英

如何在需要時自動更新Django頁面?

[英]how to auto-update a Django page only when required?

如何在沒有頁面重新加載的情況下更新Django頁面? ,我使用JavaScript從瀏覽器定期向服務器發送XMLHTTPRequests,以獲取在我的應用程序過程中發生變化的那些網頁。

但是,大多數時候,沒有任何變化; 服務器回復相同的響應,瀏覽器使用已經存在的內容更新網頁。

顯然,服務器應該只在有新數據時回復。

http://ajaxpatterns.org/Periodic_Refresh#Lace進行了徹底的網絡研究,但是dcoumentation很簡潔,我正在努力在我的Django項目中實現這個概念。 我很難相信以前沒有這樣做過。

有誰知道我可以用作指導的任何進一步的資源?

回答的難點在於不知道返回給用戶的服務器端資源是什么。

我會編造一些可以作為例子的東西。 假設您正在開發一個應用程序,允許您監視您網站上的用戶所做的實時評論。 我們可以做幾件事來實現這個目標:

  1. 服務器跟蹤添加注釋的時間(.created字段)
  2. 獲取最新評論的API要求我們指定我們想要的評論年齡
  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,檢查它是否有值,如果是這樣枚舉項目,並將新項目添加到<div>標簽或其他任何內容。


正如您所看到的,API的開發僅返回最近更新的項目將根據服務器返回的內容而有所不同。

從您的問題來看,聽起來您希望服務器管理識別最近更新的內容,而不是客戶端(這是一個好策略)。 在這種情況下,您需要做的是定義:

  1. 服務器如何跟蹤更改(在我的示例中由'created'字段完成)
  2. 客戶如何請求這些更改
  3. 服務器如何識別發生了哪些更改,以便通過API將它們返回給客戶端?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM