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