Aplicación Web con Python
Configuración del servidor Web
WebPy, a diferencia de otros frameworks, no posee un servidor de aplicaciones potente propio, y por ello, es mejor apoyarse en uno que ya esté funcionando. Entre los posibles candidatos se encuentran Apache, Lighttpd y nginx. Para este artículo he optado por Apache, dada su gran popularidad.
Una vez instalado Apache en nuestra máquina, es necesario agregar el módulo mod_wsgi, que permite hacer uso de Apache como servidor para aplicaciones escritas en Python. Este proyecto está alojado en: http://code.google.com/p/modwsgi
Una vez descargado, si estamos usando Windows, renombrar el archivo a mod_wsgi.so y copiarlo al directorio modules de Apache. En el caso de Linux, compilar el módulomod_wsgi (consultar: http://code.google.com/p/modwsgi/wiki/QuickInstallationGuide)
Una vez instalado el módulo, hay que configurar Apache para que reconozca dicho módulo. Para ello, editar el archivo httpd.conf (en el directorio conf de Apache), y agregar la siguiente línea en la misma parte en que Apache utiliza otras cargas LoadModule:
LoadModule wsgi_module modules/mod_wsgi.so
Al arrancar Apache desde la terminal debería dar un mensaje similar a éste:
Apache/2.2.2 (Unix) mod_wsgi/1.0 Python/2.3 configured
Si se lanzó desde Windows, el Apache Service Monitor, debería dar el mensaje en la parte inferior:


Instalación de WebPy
Hay varias maneras de instalar WebPy (consultar http://webpy.org/download).
Se puede descargar directamente la última versión desde la siguiente URL (consultarhttp://webpy.org/download para conocer cuál es la última versión):
http://webpy.org/static/web.py-0.34.tar.gz
También se puede descargar desde el repositorio en github:
http://github.com/webpy/webpy
Una vez descargado, descomprimir el archivo tar.gz, y ejecutar la siguiente sentencia para instalarlo como librería en Python:
python setup.py install
Primera aplicación Web
Para ilustrar la sencillez de desarrollo de una página Web con WebPy, vamos a crear la típica aplicación “Hola, Mundo”.
import web
urls = (
'/', 'index'
)
app = web.application(urls, globals())
class index:
def GET(self):
return "Hola, Mundo"
if __name__ == "__main__":
app.run()
La variable urls es una tupla que contiene pares de direccionamientos URL y nombres de clase. En este ejemplo, el direccionamiento “/” (root), estará asociado a la clase index. Se pueden definir tantos pares como sean necesarios para la aplicación Web.
El objeto app contendrá la definición de la aplicación Web. En este ejemplo se asocian las URL’s de la aplicación a namespace global.
La clase index contiene un método GET, el cual se lanzará cuando se invoque a la página, pudiendo recibir parámetros. En su interior, retornará el literal “Hola, Mundo”, el cual se imprimirá en el navegador. Existe también un método POST, que funciona como GET, pero ofuscando los parámetros. Estos dos métodos son los medios habituales de invocar a una página Web pasando (o no) parámetros.
Por último, las dos últimas líneas indican a WebPy que comience a servir páginas web con la configuración indicada.
Una vez se ejecuta este programa, el intérprete de Python se queda en modo de espera. El servicio Web está en marcha, esperando peticiones. Para probarlo, abrimos un navegador web e introducimos la URL:
http://localhost:8080
Debería aparecer nuestro bien conocido mensaje “Hola, Mundo”.
Parámetros y HTML
En una aplicación Web introduciremos elementos HTML para formatear el aspecto de las páginas. Además, añadiremos dinamismo permitiendo que las páginas muestren datos parametrizados (por ejemplo, recogidos de un formulario, o capturados de una base de datos).
Vamos a añadir más funcionalidad a nuestra aplicación anterior:
import web
urls = (
'/hola', 'Saludo'
)
app = web.application(urls, globals())
class Saludo:
def GET(self):
data = web.input()
return """
<html>
<head></head>
<body background='#AAAAFF'>
<h1>Hola, %s %s %s</h1>
</body>
</html>""" % (data.nombre, data.apellido1, data.apellido2)
if __name__ == "__main__":
app.run()
El primer cambio lo hemos realizado en la sección de urls, donde ahora, el mapeo a la página Web será el siguiente:
http://localhost:8080/hola
Cuando se apunta a /hola, se invocará a la clase Saludo, concretamente a su método GET, en donde hemos agregado varios cambios. El primero de ellos ha sido definir una variabledata, la cual recogerá los parámetros que se pasen por URL, lo que se consigue mediante la función input() del módulo web. Estos parámetros se recogerán en formato de diccionario, y son pares de parámetro y valor.
A la hora de retornar la salida, se retornará HTML, en donde hemos añadido un mensaje con formato de título (<h1>), un saludo con nombre y apellidos (extraídos de los parámetros pasados), los cuales se formatean mediante %s, e indicando después qué parámetros extraer.
Para invocar a la nueva página se pasan los parámetros en la misma URL, tal y como haría una llamada desde un formulario:
http://localhost:8080/hola?nombre=Carmen&apellido1=Martinez&apellido2=Salguero
El resultado es el siguiente:


Referencias
https://librosweb.es/libro/python/capitulo_13/python_bajo_apache.html
http://rafinguer.blogspot.mx/2010/10/aplicaciones-web-sencillas-con-python.html
No hay comentarios.:
Publicar un comentario