Как передать HttpResponse потоком с Django

Я пытаюсь добраться 'привет мир' потоковой передачи ответов, работающих на Django (1.2). Я выяснил, как использовать генератор и yield функция. Но ответ, все еще не передающий потоком. Я подозреваю, что существует промежуточное программное обеспечение, которое это унавоживает с ним - возможно, калькулятор ЗАВЕРШАЮЩЕГО ТЕГА? Но я не уверен, как отключить его. Кто-то может помочь?

Вот "привет мир", потоковой передачи этого я имею до сих пор:

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)
54
задан muudscope 27 May 2010 в 05:21
поделиться

1 ответ

Вы можете отключить промежуточное ПО ETAG с помощью декоратора condition decorator. Это заставит ваш ответ передаваться обратно по 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"
46
ответ дан 7 November 2019 в 08:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: