viernes, 29 de enero de 2010

Web.py con Apache WSGI

Seguimos con nuestra serie de contenidos instructivos para web.py y en esta ocasión veremos la manera de integrar este framework a Apache, el servidor web predilecto de internet.




- Recordemos que estamos comenzando apartir de una instalación limpia de Ubuntu 9.10, pero eso sí debidamente actualizada empleando:
    sudo apt-get update
    sudo apt-get upgrade


- Necesitamos el servidor apache y para obtenerlo podemos instalar el conjunto LAMP (Linux, Apache, MySQL y PHP) o solamente los paquetes requeridos: apache2 y el mod-wsgi
    LAMP:
    sudo tasksel install lamp-server
    *Al seleccionar este se nos pedirá una clave de administrador para MySQL y su confirmación, escoge una y apúntala
   
    BASICO:
    sudo apt-get install apache2 libapache2-mod-wsgi
   
- Activamos el módulo wsgi
    a2enmod wsgi
    *Este módulo puede estar ya activo, así que esto es sólo una medida de precaución
   
- Creamos un directorio en donde nos parezca, aunque en este caso lo haré dentro de /var/www
    sudo mkdir /var/www/webpy-app
    *También un directorio interno static
    sudo mkdir /var/www/webpy-app/static
   
- Editamos la configuración por defecto del apache2 para incluir el acceso a nuestra aplicación web.py
    sudo vim /etc/apache2/sites-available/default
    *Agregamos las siguientes líneas, mientras sean antes del tag </VirtualHost>

    #....
    WSGIScriptAlias /main /var/www/webpy-app/main.py/
    
    Alias /main/static /var/www/webpy-app/static/
    AddType text/html .py

    <Directory /var/www/webpy-app/>
            Order deny,allow
            Allow from all
    </Directory>
    #....


    *Grabamos y reiniciamos el servicio
    sudo /etc/init.d/apache2 restart
    * También podemos hacerlo con: sudo service apache2 restart

- Dentro de webpy-app copiamos o re-escribimos el archivo que empleamos en el primer post sobre web.py, pero haciendo unas pequeñas modificaciones
    sudo vim /var/www/webpy-app/main.py
    *El programa debe quedar así


import web

urls = (
  '/','index',
  '/informacion','informacion',
  )

application=web.application(urls, globals()).wsgifunc()

class index:
  def GET(self):
    return "<html><body><h1>Pagina Principal</h1><br><a href='/main/informacion'>Pagina Auxiliar</a></body></html>"

class informacion:
  def GET(self):
    return "<html><body>Pagina Secundaria<br><a href='/main'>Principal</a></body></html>"

#if __name__ == '__main__':
#  app.run()


- Abrimos el browser y accedemos a http://localhost/main
    *Ya podemos empezar a jugar con las URLs dentro de apache
   
En una siguiente entrega veremos aspectos más interesantes de web.py, como trabajar con vistas e incluso hacer un sitio web rápidamente

jueves, 28 de enero de 2010

Desarrollo web minimalístico con web.py

Web.py es un framework de desarrollo minimalístico y altamente funcional que nos permite desarrollar rápidamente aplicaciones web empleando python, por lo que comenzaré con algunos tutoriales que permitan a los interesados explorar este interesante módulo.

En el video incluído comienzo con una instalación virgen de Ubuntu Jaunty por lo que se siguen los siguientes pasos:





- Instalar el paquete python-setuptools, para así poder acceder a easy_install y e instalar diversos módulos python con simplicidad
    sudo apt-get install python-setuptools

- Empleando easy_install procedemos a instalar el módulo web.py
    sudo easy_install web.py

- Instalamos algún editor, en este caso geany (visual en gvtk) y vim (consola)
    sudo apt-get install geany vim

- Creamos un directorio en algún lugar, en este caso mi carpeta personal
    mkdir webpy-demo

- Dentro del directorio, creamos un archivo que nos permita dar inicio a nuestra aplicación: main.py
    cd webpy-demo
    vim main.py

- Presionamos la tecla (INSERT) y comenzamos a escribir el código:
 


import web

urls = (
  '/','index',
  '/informacion','informacion',
  )

app=web.application(urls, globals())

class index:
  def GET(self):
    return "<html><body><h1>Pagina Principal</h1><br><a href='informacion'>Pagina Auxiliar</a></body></html>"

class informacion:
  def GET(self):
    return "<html><body>Pagina Secundaria<br><a href='/'>Principal</a></body></html>"

if __name__ == '__main__':
  app.run()


 
    * Se invoca al módulo
    * Se define una tupla con las rutas de la aplicación
    * Se instancia al módulo
    * Se definen las clases, una por URL, empleando el método GET y retornando código HTML
    * Se accede al método run() para indicar que se inicie el servidor web integrado

- Ejecutamos la aplicación
    python main.py
    * Veremos que se inicia un servicio en el puerto 8080

- Abrimos el navegador, ponemos la dirección local seguida por el puerto y ya podemos acceder a nuestra sencilla aplicación
    http://localhost:8080
   
En unos minutos hemos desarrollado una sencilla aplicación, pero en los siguientes días exploraremos aún más las diversas potencialidades que nos ofrece web.py, incluyendo la manera de integrarlo a Apache.