首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Django流式传输HttpResponse

如何使用Django流式传输HttpResponse
EN

Stack Overflow用户
提问于 2010-05-28 00:21:20
回答 1查看 46.4K关注 0票数 58

我正在尝试让Django (1.2)的流媒体响应的“hello world”工作。我知道如何使用生成器和yield函数。但是响应仍然不是流的。我怀疑有一个中间件在搞它--也许是ETAG计算器?但我不确定该怎么停用它。有人能帮帮忙吗?

这是我到目前为止对流媒体的“你好世界”:

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-28 00:48:56

您可以使用condition decorator禁用ETAG中间件。这将使您的响应通过HTTP流返回。您可以使用命令行工具(如curl )来确认这一点。但这可能还不足以让您的浏览器在流中显示响应。为了鼓励浏览器在流传输时显示响应,您可以向管道中推送一堆空格,以强制填充其缓冲区。示例如下:

代码语言:javascript
复制
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"
票数 50
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2922874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档