我正在尝试让Django (1.2)的流媒体响应的“hello world”工作。我知道如何使用生成器和yield
函数。但是响应仍然不是流的。我怀疑有一个中间件在搞它--也许是ETAG计算器?但我不确定该怎么停用它。有人能帮帮忙吗?
这是我到目前为止对流媒体的“你好世界”:
def stream_response(request):
resp = HttpResponse( stream_response_generator())
return resp
def stream_response_generator():
for x in range(1,11):
yield "%s\n" % x # Returns a chunk of the response to the browser
time.sleep(1)
发布于 2010-05-28 00:48:56
您可以使用condition decorator禁用ETAG中间件。这将使您的响应通过HTTP流返回。您可以使用命令行工具(如curl
)来确认这一点。但这可能还不足以让您的浏览器在流中显示响应。为了鼓励浏览器在流传输时显示响应,您可以向管道中推送一堆空格,以强制填充其缓冲区。示例如下:
from django.views.decorators.http import condition
@condition(etag_func=None)
def stream_response(request):
resp = HttpResponse( stream_response_generator(), content_type='text/html')
return resp
def stream_response_generator():
yield "<html><body>\n"
for x in range(1,11):
yield "<div>%s</div>\n" % x
yield " " * 1024 # Encourage browser to render incrementally
time.sleep(1)
yield "</body></html>\n"
https://stackoverflow.com/questions/2922874
复制相似问题