每隔几秒钟更新一次httpresponse
-
20-09-2019 - |
题
我在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方法定期刷新该行的状态。
不隶属于 StackOverflow