enamorada de django (el cantante no! el framework!)
abbadingo, howto, internet, networks 4 Comments »Llevo unos días flipando con el Django. Un framework de desarrollo web en Python, que digamos vendría a reemplazar al php… pero mucho mejor. Y con todas las posibilidades de python (import antigravedad!)
En Django diseñas tu data layer de un modo más abstracto, casi como si fuera la abstracción de la información que vas a utilizar, totalmente programado con objetos, y django lo convierte en el esquema de la base de datos, poniendo constraints y primary keys.
Todo limpito, como se ve en este ejemplo de declaración de un modelo para hacer un calendario, que se conecta con el módulo de Auth.User (que viene con django en el svn):
class Event(models.Model):
title = models.CharField(max_length=100)
description = models.TextField(null=True,blank=True)
start_date = models.DateTimeField(help_text='event start')
end_date = models.DateTimeField(help_text='event end')
location = models.ForeignKey(Location,blank=True)
link = models.URLField(blank=True)
site = models.ManyToManyField(Site,blank=True)
calendar = models.Manager()
events = EventManager()
status = models.CharField(max_length=1, choices=EVENT_STATUS_CHOICES,default=2)
event_class = models.CharField(max_length=1, choices=EVENT_CLASS_CHOICES,default=1)
pixie = models.ManyToManyField(User,blank=True,null=True,related_name=’events’)
picture = models.FileField(upload_to=’events/’, null=True,blank=True)
redes = models.ManyToManyField(Group, through=’Network’,null=True,blank=True, related_name=’events’)
atendees = models.ManyToManyField(User, through=’Attendance’, null=True,blank=True)
def __unicode__(self):
return self.title
(Attenti aquí a las ForeignKeys, que relacionan con simplicidad unas tablas y otras, y a los tipos de modelos, que vienen con validación incorporada, es decir, si luego generas un formulario desde esta clase, y tratas de rellenar el campo con “gwgwg”, antes de procesarlo en la base de datos se genera un error InvalidEmail o similar….)
Vas creando apps de python y los puedes instalar y desinstalar. Cuando instalas un nuevo app, haces directamente python manage.py syncdb en el directorio de tu django… y crea la tabla en la base de datos.
Las distintas páginas las creas con apps de python también, y tienes una consola maravillosa basada en ipython en la que puedes ir probando todas las funciones, vistas, y modelos que vas haciendo. Es una estructura un poco compleja al principio, pero tan bien pensada que enseguida va teniendo sentido y en un par de semanas (o menos si eres más rápida) ya puedes estar desarrollando cositas interesantes. Yo me maravillo ante lo fácil que ha sido integrarlo con el graphviz, gracias a la librería pyDot y a la facilidad de django. Me di cuenta de las posibilidades por esta aplicación que viene en el svn del django, modelviz.py, de Antonio Cavedoni, que crea un gráfico (hermoso!) de los modelos de tu aplicación django: más en django-graphviz. Aquí algunas pruebas con el infopoint que estoy haciendo:
Un ensayo del modelviz:
Una imagen para el imagemap de navegación:
Más info también en GraphModels.
Todavía quedan algunas partes del programa por pulir, lo que no está mal ya que acaban de sacar la primera versión, pero van saliendo más y más módulos que puedes instalar con dolor mínimo y probar en tu aplicación.
Por ejemplo un lugar interesante para ver las posibilidades de django es django snippets, una plataforma donde la gente publica sus distintos apps. Aunque si no te enteras muy bien a veces es difícil reutilizarlos por falta de documentación.
Lo que más me gusta de Django es que se evita bastante la burocracia, sobre todo si te metes pronto con las templatetags y los formularios de modelos. El sistema de templates es muy fácil de usar también, con los “parent templates”.
Viene con una interfaz de administración integrada muy agradable y limpia, y si tienes instalado el docutils de python (apt-get install python-docutils) también tienes acceso a una documentación automática generada de tus distintas funciones, modelos y vistas.