Volviendo por aquí quería compartir con vosotros la siguiente entrada sobre programación Web. Esta vez, explicaremos como desarrollar utilizando Python para la programación de páginas web utilizando Apache como web server.

Como en otras ocasiones, vamos a utilizar Ubuntu 12.04 como plataforma, ya que es bastante sencillo instalar todo lo necesario para que funcione nuestra configuración.

Para empezar, si vienes de la programación de páginas web con lenguajes como PHP, ya sabrás que con Apache puedes programarlas simplemente dejando ficheros en la raíz del documento o en la raíz de tus virtual hosts.
Existe un módulo para el web server Apache llamado mod_python que permite el desarrollo de páginas web con Python del mismo modo.

Pero, no es el estándar de facto por lo que utilizaremos mod_wsgi. mod_wsgi es el módulo recomendado ya que para desarrollos serios es una mala práctica dejar los ficheros con el código fuente accesibles en la raíz del servidor, ya que un error en la configuración de este podría dejar visible el código fuente de nuestra aplicación, cosa que puede ser traumática en algunos casos.

Dejando esto de lado, vayamos a la instalación utilizando apt-get

sudo apt-get install libapache2-mod-wsgi

Este comando ya debería descargar todas las dependencias necesarias. Tras ello, la instalación de Apache habrá dejado un Virtual Host creado por defecto. Si estás usando también Ubuntu o un sistema basado en Debian, debes editar el fichero:

sudo bash
vim /etc/apache2/sites-available/default

Dentro de él tendrás el esquema original del Virtual Host que viene con Ubuntu por defecto. Ahora debes añadir el siguiente texto para que puedas dejar ficheros .py que se ejecuten en la raíz del documento.

WSGIScriptAliasMatch ^/([a-zA-Z]+[a-zA-z0-9]*).py$ /var/www/$1.py

Con esta directiva del web server Apache le estamos diciendo que queremos que ejecute con mod_wsgi todos los ficheros terminados con la extensión .py, por lo que hemos conseguido emular el comportamiento por defecto de PHP.

Por otro lado, debemos saber cual es el esqueleto de una aplicación mod_wsgi

def application(environ, start_response):
    status = '200 OK'
    output = 'Hello World!'
    response_headers = [ ('Content-type', 'text/plain'),
                         ('Content-Length', str(len(output))) ]
    start_response(status, response_headers)
    return [output]

Como puedes ver, mod_wsgi llama a una función application y nos pasa como argumento un callback el cual deberemos invocar para dejar preparado el estado, devolviendo luego una lista con el contenido que queramos enviar al cliente web.

Es probable que pienses, ¿y como sustituyo las variables? ¿Cómo uso el templating del lenguaje? ¿Cómo embebo html con Python? Incluso te estarás figurando que es muy engorrosa la programación web así. Si te estás haciendo esas preguntas es porque echas un poco de menos estas características de PHP, pero en próximas entradas trataré de mostrar como el desarrollo web con Python puede ser mucho más productivo y elegante que con PHP, utilizando template engines. Además, también hay intención de incluir algún pequeño tutorial usando Django, el framework MVC de facto para desarrollar páginas Web con Python.

Esto es suficiente para tener el entorno configurado en el web server y empezar a hacer uno sus pinitos :D

¡Hasta la próxima!