0

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

这可能吗?

4

2 回答 2

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>以供显示。

于 2009-11-18T12:38:25.963 回答
2

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

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

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

于 2009-11-18T10:18:54.340 回答