Django:通过HttpRespons流式传输动态生成的XML输出

2024-06-06 19:00:36 发布

您现在位置:Python中文网/ 问答频道 /正文

最近我想通过Django视图返回一个动态生成的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)

这样做是个好主意吗?我错过什么了吗?在


Tags: 模块django视图returnrequestdef动态root
3条回答

是的,在HttpResponse中返回迭代器是完全合法的。正如您所发现的,这允许您将内容流式传输到客户端。在

有用吗?如果它不工作,它会抛出什么错误?在

如果您正在为django站点构建一个完整的API,请看一下django活塞。它处理了很多与此相关的繁杂工作。在

http://bitbucket.org/jespern/django-piston/wiki/Home

关于中间件“打破”流媒体:

如果您在设置中设置USE_ETAGS = True,那么CommonMiddleware将尝试使用整个迭代器。但是在现代Django(1.1)中,有一种比CommonMiddleware+ConditionalGetMiddleware--^{} decorator更好的方法来完成条件get。使用它,你的流媒体就可以流了:-)

另一个尝试使用迭代器的东西是GzipMiddleware。如果您想使用它,可以通过将流式响应转换为decorator并应用于单个视图而不是全局视图来避免gzip压缩流式响应。在

相关问题 更多 >