La ventaja de cosas como Ruby On Rails, Django, TurboGears y demas es que son "stacks", o sea, es la integracion de uno o varios frameworks que automatizan cosas. El stack lo componen:
* Esquema MVC
* Un ORM (que mapea objetos a tablas)
* Un sistema de manejo de URLs
* Un sistema de generacion de plantillas / lenguaje de markup
* Un medio de integrar javascript/ajax
* Frameworks de medio y bajo nivel para comprimir la salida, autenticacion, etc...
* Todo alambrado e integrado
Para hacer una idea, es tan productivo como Delphi, solo que:
- De una vez esta en modalidad MVC
- Todo esta especificado (ej: Las clases las pones aqui, las vistas aqui. Por aqui se configura la BD, etc...) que tiene la ventaja que facilita a los nuevos a entrar y a los viejos a integrar.
- El ORM seria similar a Bold/ECO, aunque de todas maneras ECO es mas sofisticado
Por ejemplo, esto es todo lo que necesito en django para hacer CRUD y una interface administrativa automatica (Django tiene - a la fecha - el *mejor* sistema de administracion auto-generado):
Código:
class File(models.Model):
createdOn = models.DateTimeField('fecha de creacion',editable=False,blank=False,auto_now_add=True,default=datetime.now())
modifedOn = models.DateTimeField('fecha de modificacion',editable=False,blank=False,auto_now=True,default=datetime.now())
tags = models.CharField('etiquetas',maxlength=255,blank=False)
title = models.CharField('titulo',maxlength=50,blank=False,db_index=True)
userId = models.SlugField(prepopulate_from=('title', 'title'),blank=False)
content = models.TextField('contenido')
status = models.IntegerField('estado',default=1,choices=ESTATUS_CHOICES)
filePath = models.FileField('ruta de archivo',upload_to='data//files')
fileSize = models.IntegerField('tamaño en Kb',editable=False,default=0)
def __str__(self):
return '%s (%s)' % (self.name, self.filePath)
def get_absolute_url(self):
return "/descargas/%s/" % self.userId
""" Deduce el tipo de datos MIME para hacer descargas correctas """
def mimeType(self):
return mimetypes.guess_type(self.filePath)
def save(self):
Content.save(self)
class Admin:
search_fields = ['filePath','title','tags']
list_display = ('title', 'filePath','fileSize','tags')
class Meta:
verbose_name = 'archivo'
db_table = 'jhonWebFile'
Es en serio, sale muy bien...
Vale la pena mirar la informacion sobre Ruby On Rails y sobre Django y demas. Realmente, si alguien arranca hoy a hacer sitios o aplicaciones web, este seria el mejor camino...