我有一个简单的django应用程序(充当服务器),我试图将响应流式传输到客户端(请求是客户端)。这是django应用程序的views.py。
from django.shortcuts import render
from django.http import HttpResponse, StreamingHttpResponse
from django.views.decorators.http import condition
import time
@condition(etag_func=None)
def stream_response(request):
resp = StreamingHttpResponse( stream_response_generator() )
return resp
def stream_response_generator():
# yield "<html><body>\n"
for x in range(1,5):
yield "<div>%s</div>\n" % x
print "test %s" % x
#yield " " * 1024 # Encourage browser to render incrementally
time.sleep(1)
# yield "</body></html>\n"
我正在使用django中的StreamingHttpResponse函数来延迟发送给任何请求它的人的一些数据。以下是我的client.py。
import requests
r = requests.get('http://127.0.0.1:8000/stream', stream=True)
for line in r.iter_lines():
# filter out keep-alive new lines
if line:
print line
每当客户端请求url时,它都不会以增量显示输出。它在下载所有内容后立即显示整个消息。当我取消注释yield "" * 1024
时,它只显示第一个<div>1</div>
。我是否需要在views.py的标题中更改某些内容,以便请求知道如何流式传输数据?当我使用curl访问url时,它会成功传输响应。