如何在Django中显示请求响应下载到网页的进度状态

时间:2016-05-18 09:33:15

标签: django python-requests

我在Django中构建了一个应用程序,我有一个从指纹机获取考勤日志的功能,基本上是这样的:

import requests
from xml.etree import ElementTree
def main(request):
    Key="xxxxxx"

    url="http://192.168.2.188:80"

    soapreq="<GetAttLog><ArgComKey xsi:type=\"xsd:integer\">"+Key+"</ArgComKey><Arg><PIN xsi:type=\"xsd:integer\">All</PIN></Arg></GetAttLog>"



    http_headers = {
        "Accept": "application/soap+xml,multipart/related,text/*",
        "Cache-Control": "no-cache",
        "Pragma": "no-cache",
        "Content-Type": "text/xml; charset=utf-8"

    }


    response = requests.post(url+"/iWsService",data=soapreq,headers=http_headers)

    root = ElementTree.fromstring(response.content)

现在,对于100个++指纹机器将重复该过程,我需要在页面上定期和顺序显示某种进度状态以及错误消息(如果有的话,如连接无法建立等)每个事件。我的意思是:

...

&#34;机器1:下载完成。&#34;

&#34;从机器2下载数据..请稍候&#34;

&#34;机器2:下载完成。&#34;

...

感谢。

1 个答案:

答案 0 :(得分:0)

我不确定你面临的主要障碍是什么。你能尝试以更精确的方式构建问题吗?

据我所知,您希望页面根据服务器上发生的事情动态变化。我认为django可能不是最好的工具,因为它的基本用途是一次性计算完整视图然后显示它。但是,有一些事情可以做。

最简单(但不是最好的服务器负载)是使用来自网页的Ajax请求。

  • 有一个&#34;主视图&#34;加载面向用户的页面以及一些JS库(例如jQuery),它们将用于查询服务器的进度。
  • 有一个&#34;进度视图&#34;显示当前状态,并通过AJAX从主视图查询。

这不是最好的架构,因为您可能会经常或经常不经常从服务器重新加载数据。我建议看一下websockets,它允许你保持客户端 - 服务器连接打开并在需要时使用它,但是在django中没有它们的原生支持。