Streaming de datos en Django

Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.

En PHP uno pude ir mandando datos al cliente (navegador) a medida que los va procesando en el servidor. En Django siempre creé el texto de la respuesta para luego pasársela al objeto HttpResponse. A pesar de que había preguntado varias veces en el canal de chat de Django si podía hacer algo así y me habían respondido que no, tenía la intuición de que algo se podría hacer y pensé en iteradores.

Por suerte este fin de semana tuvimos un gran evento de Python y alojé en mi casa a John, quien me explicó en 5 minutos cómo hacerlo. Aquí una recreación de su ejemplo (views.py):




from django.http import HttpResponse

from time import sleep



def gen():

    for x in range(80):

        sleep(1)

        yield '*' * x + '<br/>'



def test(request):

    return HttpResponse(gen(), mimetype='text/html')



Queda para el lector ver la salida en su navegador. gen es una función que al llamarla devuelve un generador. El primer parámetro de HttpResponse puede ser un generador o cualquier objeto con el método __iter__.

En la misma jornada Nubis, estuvo explorando esto mismo desde distintos ángulos.

Comentarios

Comments powered by Disqus