每隔几秒就更新一次HttpResponse

时间:2009-11-18 10:09:38

标签: sql django filter sql-update httpresponse

我在Django 中的应用程序可以创建一些非常大SQL查询。我目前使用HttpRequest对象,我需要的数据,然后是HttpResponse,以返回我想要显示用户的内容。

显然,我可以让用户等待一分钟,同时执行这些查询并从数据库中提取,然后返回这个单一的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.

这可能吗?

2 个答案:

答案 0 :(得分:4)

我最近发现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>换行显示。

答案 1 :(得分:2)

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

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

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