jueves, enero 22, 2009

Como usar el poderoso ORM de django en una aplicación de Escritorio

Alguna vez alguien me preguntaba que tan complejo seria usar el poderoso ORM de django en una aplicación de escritorio, lo cual me pareció una cuestión interesante pero debido al trabajo y la procrastinación™ lo dejé a algún lado, en estos días como ando melómano he estado dedicándole mucho tiempo a la musica, por cierto el reproductor que yo uso es Amarok, aunque también decidí probar el mpd, en fin cada cual tiene lo suyo y amarok me parece muy poderoso, probé otros mas como exaile, que intenta ser como amarok pero esta escrito en python con librerías gtk y este muy biche, entonces curioseando y por algunos errores de comportamiento en el amarok, me dio por revisar la estructura de la base de datos, y sinceramente no es lo mejor en modelos E-R, entonces quería ver que tan complejo sería hacer un nuevo reproductor de musica, principalmente que sea un frontend a los más comunes, amarok, banshee, mpd, y demás, incluso con una interfaz web al estilo ampache, pero pues obviamente en python y usando django, entonces empecé a realizar el esquema y de repente se me ocurrio la idea de tambien hacer un cliente de escritorio y volvio esta cuestión a mi.
Lo curioso del asunto es que es mucho más sencillo de lo que creia solo hay que poner tres lineas de código al inicio de nuestra aplicación:
Nota: es importante que crees el proyecto con el django-admin

import os, sys
os.environ['DJANGO_SETTINGS_MODULE']='proyecto.settings'
sys.path+=[os.path.split(os.path.split(os.path.abspath(__file__))[0])[0]]

La primera linea importa los modulos os y sys.
La seguna pone la variable de entorno DJANGO_SETTINGS_MODULE que django buscará para saber las configuraciones del archivo settings.py y la ultima agrega al path de python el path de donde se encuentra la carpeta del projecto.

Y de esta manera ya podemos usar todo lo que nos ofrece django en una aplicación de escritorio, el ORM, los validadores, incluso los forms.

3 comentarios:

Matías Herranz [scoobygalletas] dijo...

Hola!

Usando Django 1.1.1 y Python 2.6.4 eso no anda.

Usé esto (y sí me anduvo):

import os, sys
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
script_dir = os.path.dirname(os.path.abspath(__file__))
project_dir = os.path.dirname(script_dir)
projects_dir = os.path.dirname(project_dir)
sys.path.append(projects_dir)
sys.path.append(project_dir)


Saludos!

Matías.-

diegueus9 dijo...

@scoobygalletas en que ruta tienes el script que va a usar django? que error obtienes con python2.6 y django1.1.1 porque yo lo he probado en debian con django1.2prealpha y python2.5 y funciona

Matías Herranz [scoobygalletas] dijo...

Hola!

Lo probé en Ubuntu 9.10.

Mi proyecto tiene varias apps(cada una en su carpeta, como las crea django-admin) y, dentro de una de esas carpetas, corrí el views.py (con "python views.py").

El proyecto que estoy haciendo es académico y lo voy a liberar, así que si te interesa mirar, te paso el código.

Saludos!

Matías.-