2009-10-07 25 views
7

Lo más probable es que sea una pregunta tonta para aquellos que conocen la respuesta, pero yo soy un principiante, y aquí va:Python: ¿cómo mostrar resultados en una página web?

Tengo un script de Python que ejecuto en una línea de comandos con algún parámetro, y me imprime algunos resultados Digamos que los resultados son algunos códigos HTML.

Nunca hice ninguna programación de Python para la web, y no pude resolverlo ... Necesito tener una página (OK, sé cómo cargar archivos en un servidor, Apache se está ejecutando, Python está instalado en el servidor ...) con un campo de edición, que aceptará ese parámetro, y el botón Enviar, y lo necesito para "imprimir" los resultados en una página web después de que el usuario envió un parámetro adecuado, o mostrar cualquier resultado que en un situación de la línea de comando se imprimen.

He leído los capítulos de Dive Into Python sobre "Procesamiento HTML" y "Servicios web HTTP", pero no describen lo que estoy buscando.

Si la respuesta no es corta, apreciaría mucho los enlaces a las cosas más relevantes para leer o las palabras clave para google.

Respuesta

2

Parece que solo tiene que habilitar CGI on apache, lo que prácticamente redirigirá su salida a la salida del servidor web.

Python tiene CGI library puede echarle un vistazo.

He aquí un essay by Guido (un poco anticuado)

Y un interactive instruction que parece prometedor.

p.s.

Tal vez usted también puede querer ver la oferta de Google para este Google app engine (puede que no sea lo que quiere sin embargo)

+0

También hay muchos ejemplos. Y muchos marcos. No sé si alguien todavía usa esto, pero solía usar el marco "retorcido" para el desarrollo de aplicaciones web en Python. Mucha gente usa muchas cosas, incluido Django. ¿Donde empezar? Probablemente donde Oscar dice que comience. –

1

Lamento decirlo, pero los servicios web HTTP son lo que estás buscando. Piénselo de esta manera: coloca un formulario en una página web y un botón de enviar. Esto se aplica a un servicio web que acepta la solicitud y muerde esa solicitud, y devuelve una respuesta - que es una página de html. Nunca tiene que realmente guardar el html, siempre se genera dinámicamente, pero es una página válida de html, no obstante.

Consulte django http://www.djangoproject.com/ para obtener un juego de herramientas de servicio web basado en python de alta calidad. El primer paso para comprender el modismo de solicitud/respuesta es pensar en la solicitud como un conjunto de parámetros de línea de comandos con formato específico (definido por CGI, es decir, es una acción GET o POST HTML) y la respuesta como salida con formato específico (HTML) que se envía, no a stdout, sino a través de "el cable" a algún navegador. El envío de la solicitud se extiende a través del cable y ejecuta el script con algunos parámetros, y usted recupera el resultado: su página HTML formateada.

+2

Django parece demasiado exagerado para este tipo de problema ... – Hortitude

+0

+1 al comentarista que dice "excesivo". –

4

Para una tarea tan simple, probablemente no necesite más que CGI. Afortunadamente, Python tiene un módulo incorporado cgi que debe hacer lo que desee.

O puede buscar en algunos de los marcos web mínimos, como web.py.

0

estoy completamente de acuerdo con Matt - Django es lo que quiere.Django proporciona una solución completa y una documentación realmente maravillosa que te ayudará a poner en marcha algo. Si su aplicación crece y se vuelve más complicada, Django aún puede funcionar; Django funciona incluso para sitios web muy grandes y muy complicados.

Eche un vistazo al libro gratis, The Django Book.

Otra ventaja con Django: si haces tu aplicación web en Django, puedes transferirla a Google App Engine.

+3

Así que vote matt up? Por qué una segunda respuesta –

+0

@Warren P, proporcioné una segunda respuesta porque quería decir algunas cosas que Matt no dijo. Quiero decir, solo compare mi respuesta con la suya; están lejos de ser idénticos. Reconocí que él respondió primero porque no estaba tratando de engañar a nadie para que me votase en lugar de Matt, solo estaba tratando de ser útil. Quizás sientas que mi respuesta no aporta nada útil; si es así, sugiero que me rechaces. – steveha

+0

Una pregunta seria para la comunidad aquí: ¿Hubieran sido mejores los modales de StackOverflow para haber entrado en la respuesta de Matt y haber comenzado a editarla para agregar mis otros puntos a ella? Hasta ahora no he editado otras respuestas a menos que contengan errores o código que deba corregirse. Parece incorrecto mezclar mis pensamientos con los pensamientos de otra persona sin preguntar y pensé que lo correcto era publicar mi propia respuesta. ¿Estaba equivocado al hacer esto? – steveha

0

No he leído INMERSIÓN EN PYTHON, así que tal vez lo que estoy diciendo es redundante. Como dijo Daniel, CGI puede funcionar para usted. En estos días, este sería el único caso de cosas simples con un número bastante bajo de visitas. El módulo Python CGI está documentado here. Siempre he usado ese módulo para el procesamiento de formularios y acabo de realizar impresiones para la salida. Lo mejor que he podido descifrar, esa es la manera habitual de hacer las cosas, pero no he hecho mucho CGI con Python.

No dice lo que está haciendo, por lo que voy a decir lo que puede ser obvio: Asegúrese de decirle al servidor que está produciendo una página web con su primer resultado siendo el tipo de contenido seguido por una línea en blanco. Normalmente esto se hace con:

print "Content-Type: text/html" 
print 

(Para Python 2, 3 para que necesita para hacer sus impresiones en las llamadas de función.) Después de esto, se imprime el html, cabecera, cuerpo, etc. etiquetas y la contenido real

0

Un actual método de creación sencilla (una de) Python servidor de páginas web es el wsgiref module.

wsgiref es una implementación de referencia de la especificación WSGI que se puede utilizar para agregar soporte de WSGI a un servidor o marco web.

ver algunos SO qusetions (https://stackoverflow.com/search?q=[python]+wsgiref) para ver algunos ejemplos de código y sugerencias más.

El wsgiref example es un buen punto de partida:

from wsgiref.simple_server import make_server 

def hello_world_app(environ, start_response): 
    status = '200 OK' # HTTP Status 
    headers = [('Content-type', 'text/plain')] # HTTP Headers 
    start_response(status, headers) 

    # The returned object is going to be printed 
    return ["Hello World"] 

httpd = make_server('', 8000, hello_world_app) 
print "Serving on port 8000..." 

# Serve until process is killed 
httpd.serve_forever() 
+0

wsgi se considera "mejor" que cgi, principalmente debido a la escalabilidad en las aplicaciones de producción, ¿verdad? CGI está bien para cualquier aplicación trivial de "menos de 10 usuarios". Y no es un mal lugar para empezar a aprender CGI y luego pasar a wsgi, ¿verdad? –

+0

Creo que el ejemplo WSGI es bastante simple, una opción de complejidad similar a CGI. – gimel

2

cuyo servidor web? Si se trata de un servidor web proporcionado por una empresa de alojamiento web u otra persona y usted no tiene control sobre él, debe averiguar de qué manera respaldan el uso de Python para escribir aplicaciones web. No es suficiente saber que tienen Python disponible.

Como señalaron otros, es probable que al menos las secuencias de comandos CGI que usan Python sean compatibles. Sin embargo, CGI no es realmente práctico para ejecutar grandes frameworks web de Python como Django.

Es posible que el servidor web también sea compatible con FASTCGI. Si ese es el caso, es posible usar marcos web de Python más grandes ya que FASTCGI usa procesos persistentes mientras que CGI crea un proceso para cada solicitud, donde la sobrecarga de los grandes frameworks web de Python generalmente hace que el uso de CGI sea poco práctico como resultado.

Si el servidor Apache es controlado por otros que usan un servidor web Python independiente como wsgiref y proxying a él desde Apache no será factible ya que no puede configurar Apache para hacerlo.

Así que descubra cómo se admite el uso de Python para aplicaciones web y resuelva si usted es solo un usuario de la instancia de Apache o si tiene algún control para cambiar sus archivos de configuración global y reiniciarlo. Esto dictará lo que puede hacer y usar.

Cuestiones relacionadas