2011-05-25 42 views
5

Como mi primera aplicación web desarrollé una encuesta muy simple. El usuario realiza preguntas aleatorias cada vez que la página se actualiza. La respuesta se envía a un script cgi usando una publicación para guardar las respuestas a la base de datos.Página web redirigir a la página principal con CGI Python

Sin embargo, cuando el usuario presiona el botón de enviar automáticamente va a la página que se encarga de procesar los datos y como no tiene salida, es una página en blanco. Ahora, si el usuario quiere responder otra pregunta, tiene que presionar la tecla "atrás" en el navegador y actualizar la página para que aparezca una nueva pregunta. No quiero esto

Lo quiero de una manera que cuando los usuarios presionan enviar, las respuestas van automáticamente al script de procesamiento y la página se actualiza con una nueva pregunta o al menos después redirige a la página principal de la encuesta con una nueva pregunta .

+0

'meta http-equiv = "refresh" content = "0; url = http: //example.com/">' no es una ¿opción? – khachik

+0

@Khachik: ¿dónde debería ponerlo? en el encabezado? – Hossein

+0

se mantiene refrescante después de que se carga la página. ¿Hay alguna manera de evitarlo? –

Respuesta

6

desea implementar esto: https://en.wikipedia.org/wiki/Post/Redirect/Get

Es mucho más sencillo de lo que parece. La secuencia de comandos CGI que recibe la POST debe producir simplemente el resultado siguiente:

Status: 303 See other 
Location: http://lalala.com/themainpage 
+0

Dónde imprimir esos resultados ? –

+0

Si bien esto funciona bien en Chrome en mi escritorio, en mi iPad recibo un error de safari que dice "demasiados redireccionamientos" ... ¿alguna idea? Intenté vaciar el caché en el ipad ... pero no tuve suerte. –

0
<html> 
    <head> 
    <meta http-equiv="refresh" content="0;url=http://www.example.com" /> 
    <title>You are going to be redirected</title> 
    </head> 
    <body> 
    Redirecting... 
    </body> 
</html> 

Ver meta-refresh inconvenientes y alternativas here.

+0

Lo hice, pero mi página sigue siendo refrescante después de la carga ... Quiero que se actualice una vez después del envío del formulario. se actualiza antes de presionar el botón de enviar. – Hossein

+0

@Hossain, probablemente, redirija a una página, que también contiene ese meta. – khachik

+0

cierto, las preguntas se hacen en la página principal. después del envío, quiero que esta página principal se actualice nuevamente (lo que hace que aparezca una nueva pregunta) – Hossein

6

También puede enviar una cabecera HTTP de la secuencia de comandos de procesamiento:

Location: /

Después de haber procesado su respuesta, que le envíe el encabezado anterior. Yo recomendaría agregar una cadena de consulta de números aleatorios. p.ej. ejemplo pitón (asumiendo que usted está utilizando el módulo CGI pitón):

#!/usr/bin/env python 
import cgitb 
import random 
import YourFormProcessor 

cgitb.enable() # Will catch tracebacks and errors for you. Comment it out if you no-longer need it. 

if __name__ == '__main__': 
    YourFormProcessor.Process_Form() # This is your logic to process the form. 

    redirectURL = "/?r=%s" % random.randint(0,100000000) 

    print 'Content-Type: text/html' 
    print 'Location: %s' % redirectURL 
    print # HTTP says you have to have a blank line between headers and content 
    print '<html>' 
    print ' <head>' 
    print ' <meta http-equiv="refresh" content="0;url=%s" />' % redirectURL 
    print ' <title>You are going to be redirected</title>' 
    print ' </head>' 
    print ' <body>' 
    print ' Redirecting... <a href="%s">Click here if you are not redirected</a>' % redirectURL 
    print ' </body>' 
    print '</html>' 
+0

¿me puede dar un ejemplo más detallado, soy completamente nuevo? no sé exactamente dónde poner esto.thx – Hossein

Cuestiones relacionadas