Después de leer varios artículos de @Aaloy sobre django, python y sus virtudes (Toni es un super-mega-fan de django). Me picó la curiosidad, hice un par de pruebas y decidí desarrollar un nuevo proyecto en esta plataforma. Aún quedan unas semanas para que este proyecto salga a la luz, estoy en ello.
Sin experiencia previa en python, algún pequeño script y poco más, nunca desarrollé nada desde cero. Ha sido un poco complicado aprender el framework al mismo tiempo que el lenguaje, aveces hacía algo mal y no sabía si el fallo era por no utilizar bien alguna función de django o a nivel de python. Lo que está claro es que la curva de aprendizaje es baja, en menos de una semana ya estaba escribiendo “en serio”. Con otros lenguajes me tomó más de una semana, supongo que también influye la experiencia, programo en Perl desde hace 10 años y en PHP hace unos 7 años.
A continuación voy a contar lo más destacable de mi experiencia, lo bueno y lo malo. Como es mi primer proyecto esto no es una evaluación global o comparativa.
Lo bueno
“Model Layers” o la capa de abstracción a base de datos
Esto sí que es impresionante. Es increíblemente sencillo crear las tablas con sus relaciones, tipos de datos, etc.. Lo mejor es que lo puedes organizar todo de tal manera que no te lías con los campos o los nombres. Cuando se crean las tablas a mano yo casi siempre me equivoco en algo, el nombre de un campo, o me olvido de poner alguna relación. Se arregla fácilmente pero son horas que con django te ahorras.
PyPI
Similar a CPAN del mundo Perl o Pear de PHP. Tiene una cantidad enorme de módulos, muy potentes, bien desarrollados, bien documentados. Y estos módulos no son de django, son de python por lo dispones de código para trabajar en cualquier capa (web, sistema de ficheros, base de datos, sistema operativo…)
Una parte del proyecto comprende un demonio, esto ya no tiene nada que ver con django, es python puro. He utilizado threding y twisted, entre muchos otros, la experiencia ha sido muy positiva.
Documentación de django
Es clara, con ejemplos, bien presentada, separado por versiones, esto último es muy bueno porque puedes ver claramente como adaptar tu código en caso de actualización. Tienen documentada hasta la versión “dev” es decir, que estás bien preparado para la próxima versión. Esto no lo he visto en otros lenguajes, cuando sale la actualización es cuando falla algo y te buscas la vida para arreglarlo.
Decorators
Esto me ha encantado. Evita escribir el mismo código varias veces para validar permisos, o si tienes todos los parámetros que necesitas, etc.. simplemente escribes el “decorator” como un “class” y lo añades en cualquier class o def (función) con un @tuDecorator. Muy práctico.
1 2 3 4 5 | from django.contrib.auth.decorators import login_required @login_required(redirect_field_name='my_redirect_field') def my_view(request): ... |
Más información http://wiki.python.org/moin/PythonDecorators
Las plantillas de django
Simplemente son geniales. He trabajado con otros sistemas de plantillas de Perl y PHP. Son más engorrosos, pesados, y añadir alguna funcionalidad aveces es muy lioso. Las plantillas de django son limpias, fáciles, rápidas y puedes añadir cualquier funcionalidad con muy pocas líneas.
Leer el código de python es muy fácil
Después de 10 años programando en Perl aveces me encuentro con código que me cuesta entender (da la impresión de que lo escriben para que no se entienda). Con python esto no pasa, es muy fácil de leer, al ser todo objetos se puede poner todo en una línea sin que sea confuso, y la organización de módulos es muy limpia.
Lo malo
Codificación (utf8, ascii, y la madre que los parió)
Con diferencia, este ha sido el asunto que más dolores de cabeza me ha dado. Me costó muchísimo. Tenía que tratar ficheros (externos, aportados por el usuario) que podrían estar en cualquier codificación, iso-8859-1, utf8… y siempre fallaba alguno, probé todo lo que encontraba por google y nada funcionaba al 100%. Implemente “codecs” para abrir, leer y escribir los ficheros, y nada, los problemas continuaban.
Hasta que encontré la explicación. En python el código (lo que escribe el programador) puede estar en una codificación (utf8,..) pero trabaja con otra. Y hay un cambio importante de python 2 a python 3 en este campo. Yo estaba trabajando con python 2.7 que es la que viene en ubuntu por defecto. Al final, después de muchas horas (demasiadas) encontré estas tres líneas y resuelven completamente el problema, trabaja a todos los niveles con utf8 y asunto resuelto. O mejor dicho, puedes controlar con que codificación trabaja.
1 2 3 | if sys.version_info < (3, 0): reload(sys) sys.setdefaultencoding('utf8') |
Para tratamiento de texto siempre utilicé Perl y jamás tuve un problema similar, de hecho es muy potente y versátil en este campo.
Instalar y configurar django
No es difícil una vez que sabes lo que hay que hacer. Tuve problemas al tener código por un lado, plantillas por otro, ficheros estáticos por otro. Una vez comprendes que debes poner en settings.py ya es bastante sencillo. Lo pongo como malo porque son muchos pasos solo para ponerlo en marcha. En otros lenguajes y frameworks esto es más rápido.
Documentación de python
La documentación oficial de python no me gusta, casi no hay ejemplos, es solo un “libro de referencias”. Como decía antes, django o php tienen mejor documentación.
Y esto es todo. Cualquier aclaración o corrección será bien recibida 🙂