lunes, marzo 22, 2010

MVC en Python

Últimamente he utilizado herramientas como SQLAlchemy y Turbogears en Python. La verdad me ha gustado mucho la flexibilidad y facilidad con la que puedo escribir scripts para procesar información con SQLAlchemy y me ha gustado mucho el modelo MVC de Turbogears 2, parecido al de Spring en Java, por lo que voy a comenzar a implementar más cosas en python.
Comenzaré con un blog/cms en Turbogears, yo sé que existen muchísimas opciones ya desarrolladas que seguramente son mejores a cualquiera que yo pueda hacer, sin embargo, me sirve para familiarizarme en ambiente de trabajo con TG2.

Instalando Turbogears.
La mejor opción es con Virtualenv, que crea un "ambiente virtual" de python para cargar dependencias, librerías y versiones, etc. Sin embargo en producción a mi me ha funcionado instalarlo junto con el resto de python del servidor. Las instrucciones para instalarlo son sencillas y están aquí.
Creando un proyecto
Es muy simple iniciar un proyecto en Turbogears.

$ paster quickstart
Enter project name: Altadefinicion
Enter package name [altadefinicion]:
Do you need authentication and authorization in this project? [yes]
Selected and implied templates:
tg.devtools#turbogears2 TurboGears 2.0 Standard Quickstart Template

Variables:
auth: sqlalchemy
egg: Altadefinicion
geo: None
package: altadefinicion
project: Altadefinicion
sqlalchemy: True
sqlobject: False
tgversion: 2.0.3
Creating template turbogears2
Creating directory ./Altadefinicion
...
...
...
reading manifest template 'MANIFEST.in'
writing manifest file 'Altadefinicion.egg-info/SOURCES.txt'

Si no recibimos ningún mensaje de error, podemos iniciar la aplicación con:

$ paster serve --reload development.ini

Y apuntando nuestro explorador a http://localhost:8080 podremos ver una página de bienvenida.



Entrando al directorio del proyecto podemos observar una simple estructura:

$ tree -d
.
|-- Altadefinicion.egg-info
|-- altadefinicion
| |-- config
| |-- controllers
| |-- i18n
| | `-- ru
| | `-- LC_MESSAGES
| |-- lib
| |-- model
| |-- public
| | |-- css
| | `-- images
| |-- templates
| `-- tests
| |-- functional
| `-- models
|-- data
| `-- sessions
`-- ez_setup

25 directories

Por default TG2 usa SQLite como motor de base de datos y almacena todo en un archivo llamado devdata.db para crear la base de datos por default con datos de prueba hay que correr otro comando de paster:

$ paster setup-app development.ini

Con esto ya tenemos lista la cimentación para construir una aplicación con python, usando Turbogears 2 y SQLalchemy