CherryPy 3

Muy de moda se han puesto los llamados “frameworks de desarrollo web” y con justa razon. El uso de un “framework” te ahorra mucho trabajo, te permite programar con mas rapidez, realizar un trabajo mas consistente, le da estructura a tu aplicacion y, como si fuera poco, al seguir el “estandar” del framework que utilices, tendras todo un batallon de programadores alrededor del mundo dispuestos a brindarte soporte [mayoritariamente] gratuito ante cualquier problema (algo que nunca falta).

Definir “web framework” es una tarea demasiado complicada. A veces he tratado de hacerlo; buscando ayuda con la teoria caigo en la ya clasica wikipedia que dice:

En el desarrollo de software, un framework es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado.

Si, claro que si, pero, dile esto a alguien que nunca ha usado uno y veras como aclaras sus dudas! (Sarcasmo). Veamos que dice un poco mas adelante en el mismo articulo:

Los Frameworks son diseñados con el intento de facilitar el desarrollo de software, permitiendo a los diseñadores y programadores pasar más tiempo identificando requerimientos de software que tratando con los tediosos detalles de bajo nivel de proveer un sistema funcional. Por ejemplo, un equipo que usa Apache Struts para desarrollar un sitio web de un banco puede enfocarse en cómo los retiros de ahorros van a funcionar en lugar de preocuparse de cómo se controla la navegación entre las páginas en una forma libre de errores. Sin embargo, hay quejas comunes acerca de que el uso de frameworks añade código innecesario y que la preponderancia de frameworks competitivos y complementarios significa que el tiempo que se pasaba programando y diseñando ahora se gasta en aprender a usar frameworks.

Correcto, muy cierto. Asi que, para entender de una vez el concepto de “framework” empecemos gastando un poco de tiempo en aprender uno, CherryPy. (Si quieres una lista bastante completa de web frameworks existentes, en distintos lenguajes, visita: http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks)

Nota aparte: Tambien existen un par de frameworks destinados a desarrollar “aplicaciones de escritorio”, en vez de web, como Spring RCP (Java + Swing) y GnuEnterprise (Python + GTK; muy prometedor este proyecto, les recomiendo leer su documentacion, empezando por aqui)

Por que usar CherryPy?

Esta es una pregunta interesante. Hubo algun momento en el que me dedique a investigar sobre frameworks escritos en Python y realmente que existen muchos, entre los que sobresalen Django, Turbogears y Plone (evolucion de Zope).

En mi investigacion llegue a darme cuenta de que un framework generalmente se compone de las siguientes piezas:

  • Controlador (controller)
  • Motor de plantillas (template engine)
  • Persistencia (ORM: Object-Relational Mapper)
  • Validacion de formularios
  • Mensajeria
  • Conjunto de Widgets (no se en español, si alguien me dice, por favor!)
  • Librerias javascript

Resulta que en el mundo maravilloso de Python podemos encontrar todas estas piezas por separado y con mucha variedad en cada uno. Veamos:

  1. Controlador: Cherrypy, Webpy, mod_python (este ultimo mas bien serviria de base para hacerte el tuyo).
  2. Motor de plantillas: Aqui si que hay muchas; Mako (mi preferido, no dejen de dar click en el link y ver el ejemplo que aparece en la pagina principal!), Kid, Cheetah, Genshi, PSP, Clearsilver, ZTL, SimpleTAL,… etc… etc.
  3. ORM: SQLObject y SQLAlchemy
  4. Validacion de formularios: FormEncode… y creo que aqui no hay duda.
  5. Mensajeria: PyRO
  6. Widgets: ToscaWidgets

Y seguro que hay muchisimas cosas mas rodando por ahi. Sucede que hay 2 tipos de frameworks: primero, los que crean su propio controlador, plantillas y todo lo demas (como Django), y, segundo, los que sirven como pegamento para herramientas ya existentes (TurboGears).

Por ejemplo, TurboGears usa por defecto el motor de plantillas Kid (aunque ahora agregaron una capa de abstraccion para las plantillas a la que denominaron Buffet que te permite utilizar casi cualquier motor de plantilla de tu preferencia; todavia no lo he probado, talvez algun dia lo haga y lo comente mejor), como ORM usa SQLObject, como widgets los ToscaWidgets y como controlador… ah!, CherryPy.

-“…entonces, CherryPy es un framework o un simple controlador?”

Mas arriba dije que ibamos a aprender a utilizar un framework llamado CherryPy y ahora les digo otra cosa, lo se. Les dire, en esencia es un simple controlador, pero, talvez la verdadera importancia de aprender sobre CherryPy es que podemos elegir el resto de piezas a nuestro antojo!

Talvez a mi no me gusta el motor de plantillas que trae Turbogears y prefiera Mako… y asi podria ir cambiando pieza por pieza. Talvez a mi me gusta la combinacion CherryPy (controlador) + Mako (plantillas) + SQLAlchemy (persistencia) + FormEncode (validacion) + ToscaWidgets (widgets) + JQuery (javascript). Lo ven? Y esta es la formula que vamos a ir desarrollando en este “pequeño cursito”; o sea que pronto tendremos nuestro “framework a la medida”. Primero haremos el ejemplo con CherryPy, luego le agregamos Mako al ejemplo y mas adelante probamos con SQLAlchemy,.. y asi hasta que estemos listos para lanzarnos en grande con un proyecto.

Instalar CherrPy en Ubuntu 7.10

Utilizo Ubuntu 7.10, asi que muchas veces me voy a referir como suponiendo que utilizan el mismo sistema operativo. Si no es asi, lo siento, tendran que averiguar como hacer algunos detalles en el sistema operativo que usen.

Instalar en Ubuntu el CherryPy3 es cuestion de rascarse la panza:

sudo aptitude install python-cherrypy3

Listo! Si no estas convencido de que se haya instalado correctamente puedes abrir la consola de python y escribir “import cherrypy”; si no te lanza un error quiere decir que todo esta bien. Fijense en este ejemplo:

minibota@minibota-laptop:~$ python
Python 2.5.1 (r251:54863, Oct 5 2007, 13:36:32)
[GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import cualquiercosa
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
ImportError: No module named cualquiercosa
>>> import cherrypy
>>>

Si no tuvieras CherryPy instalado te sucederia lo mismo que me ocurrio al hacer “import cualquiercosa”.
Primer ejemplo con CherryPy

6 Comments

  1. Excelente el primer fasciculo, gracias por compartir el conocimiento…. espero ansioso las proximas clases !!!

  2. Buenas: hace mucho tiempo que no escribes un post, ¿te ha pasado algo? Quizá si: lo último que colocaste fué algo acerca de instalar el Vista, así que quizá la maldición de William Gates III ha caido sobre ti…

    En serio: espero (esperamos) con impaciencia que continues lo empezado en este post (y en el resto)

    Un saludo.

  3. Y un pregunta que sucede si ya tengo el CherryP2 y quiero instalar/actualizar el CherryP3, osea el ultimo, hay algo que hacer para poder quitar CherryP2 y tener el CherryP3? o alguna manera de actulizar de uan version a otra?

    Gracias de antemano.

    Saludos Walker.

  4. Plone no es una evolución de Zope, se basa en un CMS que corre en Zope.

    Zope es el servidor de apliaciones y framework, Plone usa esa infraestructura.

    Zope 3 por otro lado, es más python que otra cosa, si se compara con versiones anteriores.

    nota: he llegado aqui gracias a google buscando sobre Cherrpy+Mako templates.

Leave a Reply

Your email address will not be published. Required fields are marked *