更新HttpResponse每隔几秒

问题描述:

我的应用程序在Django 可以创建一些非常大SQL查询。我目前使用HttpRequest对象来获取我需要的数据,然后使用HttpResponse来返回我想要显示的用户。更新HttpResponse每隔几秒

显然,我可以让用户等待一分钟,同时执行这些多组查询并从数据库中提取,然后返回这个monolothic HTML页面。

理想情况下,我想更新页面时,我想,是这样的:

For i,e in enumerate(example): 

    Table.objects.filter(someObjectForFilter[i]). 

    #Return the object to the page. 
    #Then Loop again, 'updating' the response after each iteration. 

这可能吗?

我最近发现一个HttpResponse可以是发电机:

def myview(request, params): 
    return HttpResponse(mygenerator(params)) 


def mygenerator(params): 
    for i,e in enumerate(params): 
     yield '<li>%s</li>' % Table.objects.filter(someObjectForFilter[i]) 

这将逐步的mygenerator结果返回到该页面,包裹在显示的HTML <li>

你的方法有点有缺陷。你有几个不同的选择。

第一个可能是最简单的使用AJAX和HTTPRequest。有一系列的这些,每一个都会导致一个单一的Table.objects.filter(someObjectForFilter[i]).。每完成一次,脚本就完成并将结果返回给客户端。客户端更新UI并通过另一个AJAX调用启动下一个查询。

另一种方法是使用批处理系统。这有点过于复杂,但如果你要在数据库中进行真正的“繁重工作”,可能会更好一些。你需要运行一个批处理守护进程(一个cron探针可以很好地工作)来扫描传入的任务。用户想要执行某些操作,因此他们的请求会提交此任务(它可能仅仅是数据库中的一行,并带有其参数)。守护进程抓取它,完全脱机处理它 - 甚至可能通过不同的机器 - 并在任务行完成时更新任务行。然后,客户端可以定期刷新以通过传统或AJAX方法检查该行的状态。