我在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.

这可能吗?

有帮助吗?

解决方案

我最近发现,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方法定期刷新该行的状态。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top