Streaming de datos en Django

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):

<code>
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')
</code>

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.

About Juanjo

Mi nombre es Juanjo Conti, vivo en Santa Fe y soy Ingeniero en Sistemas de Información. Mi lenguaje de programación de cabecera es Python; lo uso para trabajar, estudiar y jugar. Como hobby escribí un libro de cuentos que se puede descargar gratuitamente.
This entry was posted in Django and tagged . Bookmark the permalink.
  • http://www.taniquetil.com.ar/plog/ Facundo Batista

    ¡¡Que valioso activo el de la comunidad de Python Argentina!!

    Me alegro mucho que podamos subirnos a los hombros mutuos para lograr mayores alturas.

    Slds.