Foros del Web » Programando para Internet » Python »

Django: Mostrar un mensaje

Estas en el tema de Django: Mostrar un mensaje en el foro de Python en Foros del Web. Hola, voy a intentar explicar lo mejor posible lo que quiero hacer, pero advierto que he dormido muy poco, asi que no prometo nada :P ...
  #1 (permalink)  
Antiguo 04/03/2011, 06:01
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 11 meses
Puntos: 2
Django: Mostrar un mensaje

Hola,

voy a intentar explicar lo mejor posible lo que quiero hacer, pero advierto que he dormido muy poco, asi que no prometo nada :P

A ver, tengo una vista en django que me carga una plantilla y que inicia un subproceso en modo background. En el subproceso, ejecuto un script que tarda un rato en terminar de ejecutarse. Lo que quiero es que cuando termine de ejecutarse este script se muestre un mensaje al usuario. No se si se puede modificar la plantilla que se esté viendo en ese momento, o lanzar un mensaje tipo alert,...

Os pongo parte del código:

Código Python:
Ver original
  1. def func(request):
  2.     background = process()
  3.     background.start()
  4.     return render_to_response('plantilla.html')
  5. class process(threading.Thread):
  6.     def __init__(self):
  7.         threading.Thread.__init__(self)
  8.     def run(self):
  9.         os.system('/script/convert.sh ')
  10.        #Aquí tendría que poner el código necesario para mostrar el mensaje al usuario

Última edición por AubeRoseau; 04/03/2011 a las 06:45
  #2 (permalink)  
Antiguo 05/03/2011, 17:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Django: Mostrar un mensaje

Puedes hacer eso con un AJAX Asynchronous call
  #3 (permalink)  
Antiguo 06/03/2011, 13:20
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Django: Mostrar un mensaje

Vale agregar que esto ya no depende de django sino que es Javascript puro y duro
  #4 (permalink)  
Antiguo 07/03/2011, 02:53
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 11 meses
Puntos: 2
Respuesta: Django: Mostrar un mensaje

Pero se puede meter código ajax dentro de código python?? Lo siento, pero ando un poco perdida con esto :(
  #5 (permalink)  
Antiguo 07/03/2011, 07:39
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Django: Mostrar un mensaje

No es que metas código de js dentro del código de python. Si no que vas bien vas a tener tu código en js y simplemente lo linkeas al momento de hacer tu vista, template o clase admin.
  #6 (permalink)  
Antiguo 07/03/2011, 07:46
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 11 meses
Puntos: 2
Respuesta: Django: Mostrar un mensaje

Uy, lo siento, pero creo que no he entendido nada XD

Veamos, yo tengo mi archivo js, que básicamente podría ser:

Código Javascript:
Ver original
  1. function final() {
  2. alert("finalizado")
  3. }

El problema es que yo quiero que se ejecute la funcion final cuando se haya terminado de ejecutar el script. Esto, creo yo, que no se puede controlar desde javascript, sino que solo se puede contralar desde Django. Nose si habéis entendido bien lo que quiero hacer. Lo mismo no es realizable. Estoy un poco perdida.... :(
  #7 (permalink)  
Antiguo 07/03/2011, 09:36
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Django: Mostrar un mensaje

Sí se ha entendido lo que querés hacer, y es posible usando llamadas asíncronas como se explica en el enlace que razpeitia te dio antes.

El tema es que creo que no estás entendiendo cómo funcionaría a nivel básico.
Recordá que AJAX es Javascript, y que Javascript se ejecuta en el navegador, después de que la página fue generada en el servidor por Django (o cualquier otro framework o lenguaje que uses en el servidor) y por lo tanto Javascript y django solamente pueden interactuar mediante peticiones http. Actualmente no existe[*] una forma de que Django inicie una transmisión, tenés que iniciarla desde Javascript. Lo que quiero decir es que no podés hacer que django le mande "ya terminé" al navegador, si con Javascript no le preguntás antes "¿terminaste?"

La idea es, entonces, que hagas una llamada asíncrona al servidor desde javascript, y que en el servidor tengas una vista que simplemente responda "ya terminé" cuando llegue el momento.
La llamada asíncrona asegura que Javascript (y el navegador) se quedarán esperando por esa respuesta, y cuando llegue se ejecutará la función que elijas.
Usando esa función podrías actualizar la página, o mostrar un mensaje.

Si demora mucho, para evitar problemas de tiempo de respuesta agotado (timeout) podrías hacer un bucle en javascript que cada x segundos le pregunte al servidor. Pero la idea básica es la que intenté explicar en el párrafo anterior.

Espero que te haya quedado más claro ahora.
[*] en realidad sí existe, pero involucra técnicas relativamente avanzadas (server push) o muy nuevas (web sockets)

Saludos
  #8 (permalink)  
Antiguo 08/03/2011, 03:19
Avatar de AubeRoseau  
Fecha de Ingreso: diciembre-2010
Ubicación: Sevilla
Mensajes: 90
Antigüedad: 13 años, 11 meses
Puntos: 2
Respuesta: Django: Mostrar un mensaje

Waauuu, muchísimas muchísimas gracias por tu explicación, me ha quedado mucho más claro No llegaba a entender bien el concepto de Ajax.

Lo dicho, gracias : )

Etiquetas: django, manualmente, https
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 08:39.