2009-10-10 9 views
6

Tengo una función de administración controlada (base de datos de importación) que puede tomar algún tiempo para terminar, por lo que quiero mostrar algo de información al usuario durante ese tiempo - por ejemplo, una barra de progreso, o sólo algunos mensajes. Incluso el envío de la página en partes durante la acción prolongada sería suficiente.Django - Pantalla Acción progreso

Cuál sería la forma más sencilla de hacerlo en Django?

+0

por qué no Barra de progreso? .. se puede elaborar un poco, ¿Por favor? – 0100110010101

+0

La barra de progreso también estaría bien, pero no sé cómo podría controlarla desde la función que realiza la acción – hmp

Respuesta

1

No hay manera de hacer esto sin algún tipo de script del lado del cliente, es decir Ajax. Necesita algo que sondeará el servidor a intervalos regulares y mostrará una respuesta al usuario. Hay a snippet que muestra cómo se podría hacer esto.

Por supuesto, para que esto sea posible también tendrá a la granja de la importación en sí a un proceso fuera de línea. Esto haría la importación y registraría su progreso en algún lugar de forma regular (en un archivo o en la base de datos) para que el Ajax pueda consultarlo. Una buena forma de hacerlo es usar celery, la cola de tareas distribuidas basada en Django.

Finalmente, necesitará una vista simple que llamará el Ajax, que consultará el proceso de larga ejecución (o mirará el registro de progreso que crea) e informará al cliente.

Por lo tanto, bastante complicado.

3
  1. Sondeo Ajax - Al usar un temporizador del lado del cliente, constantemente sondeas al servidor sobre su estado. El proceso es así: el usuario configura los detalles de la base de datos y acierta 'cargar'. El archivo se transfiere y la solicitud de página inicia un proceso asincrónico en el servidor para realizar la importación de la base de datos. Cuando el usuario hace clic en cargar, inicia un temporizador del lado del cliente que a intervalos regulares envía una solicitud AJAX al servidor para preguntarle sobre su progreso. El servidor devuelve JSON y el script del lado del cliente averigua qué quiere hacer con él.

  2. COMET - No estoy tan familiarizado con esto, pero tradicional AJAX funciona por el cliente envía una solicitud al cortar. Se lo conoce como comunicación 'pull'. En COMET, es push. El servidor devuelve datos al cliente sobre su progreso, incluso si el servidor no lo solicitó. Esto crea una situación con menos tensión en el servidor que la votación. Google muestra algunos resultados para las personas que usan COMET with Django.

  3. Reverse AJAX - Similar al cometa. Reverse Ajax with Django.

(me disculpas, sé lo más mínimo por la última 2, pero pensé que al menos le gustaría saber que existen)

Cuestiones relacionadas