python - Django:通过 HttpResponse 流式传输动态生成的 XML 输出

标签 python xml django

最近我想通过 Django View 返回一个动态生成的 XML 树。我用于 XML 操作的模块是常用的 cElementTree。

我想我通过执行以下操作解决了我想要的问题:

def view1(request):
    resp = HttpResponse(g())
    return resp

def g():
     root = Element("ist")
     list_stamp = SubElement(root, "list_timestamp")
     list_creation = str(datetime.now())

     for i in range(1,1000000):
         root.text = str(i)
         yield cET.tostring(root)

这样的想法好吗?我错过了什么吗?

最佳答案

关于中间件“破坏”流:

如果您在设置中设置 USE_ETAGS = True,CommonMiddleware 将尝试使用整个迭代器。但在现代 Django (1.1) 中,有一种比 CommonMiddleware + ConditionalGetMiddleware 更好的方法来进行条件获取 -- condition decorator .使用它,您的流式传输将正常进行:-)

另一个会尝试使用迭代器的东西是 GzipMiddleware。如果你想使用它,你可以通过将它变成一个装饰器并应用于单个 View 而不是全局来避免对你的流媒体响应进行 gzip 压缩。

关于python - Django:通过 HttpResponse 流式传输动态生成的 XML 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1683144/

相关文章:

python - Pandas 数据框添加 2 个数据框

python - 在 Python 中调用 URL 时出错

Xmlstarlet - 将一个属性的值复制到另一个属性(如果元素中存在)

python - 如何使用 Python 删除元素节点但将其子节点保留在 XML 文件中?

java - XML解析: counting the number of sub elements

python - 任何 Python OLAP/MDX ORM 引擎?

python - 使用 Datetimeindex 选择行

python - multiprocessing.Queue 在进程结束时挂起

python - Django Hive 连接

python - 在 Django 中使用多个数据库,让另一个数据库包含不是由任何模型创建的表