如何使用Django流HttpResponse

我正在尝试获得适用于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)

回答:

你可以使用条件装饰器禁用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"

以上是 如何使用Django流HttpResponse 的全部内容, 来源链接: utcz.com/qa/414484.html

回到顶部