Para los que no me conocen, yo trabajo en mi propia empresa de software y en estos últimos años estamos muy centrados en las aplicaciones webs. Día a día me peleo con PHP, javascript y con Python, pero… tengo una debilidad y es Django: Django es sencillo, rápido y; sobre todo elegante.

Hace muchos años, cuando empecé en esto, mi puerta de entrada en el desarrollo web fue con PHP y elegí, por varios motivos que no vienen a cuenta, Symfony. Con el tiempo me di cuenta de que PHP es una basura, así que tenía que buscar una alternativa. Sí, basura, es duro decirlo pero lo es y lo puedo debatir con cualquiera. Symfony oculta un poco ese tufo pero no lo elimina del todo y, cuando menos te lo esperas, te viene una bofetada maloliente recordándote que PHP se creó como un lenguaje de scripting para ‘meterlo’ entre el código HTML, nada más.

La alternativa elegida fue Python. Yo ya había trabajado con Python creando pequeños programas para Linux usando QT; así que lo único que necesitaba era un framework para web, y me topé con Django.

¿Cómo es posible que la estructura y la mayoría de los método y funciones de Django no hayan cambiado desde la versión 1? Es decir, si nos fijamos en Symfony, con cada nueva versión mayor, cambia todo; desde la estructura y organización de carpetas y ficheros hasta los métodos, clases, ficheros de configuración… Es como si para cada versión mayor quisieran probar algo nuevo porque lo que tienen no sirve. Django, en cambio, desde la versión 1 no ha cambiado nada. Quizá algún nombre de alguna función o variable. Es más, creo que los mayores cambios han sido forzados por el cambio de python 2 a python 3. Si algo funciona, ¿para qué cambiarlo?

Sencillo y simple

¿Puede ser que en cinco minutos tengas una web funcionando? Exacto, pero es que usando cualquier contenedor de Docker que los que existen en Github, lo tienes en producción rápidamente usando Kubernetes. Olvídate de gestionar la base de datos, los modelos de Django son sólo clases con variables, y Django se encarga de crear las tablas, las consultas, todo. Y si realizas algún cambio Django se encarga de crear las migraciones. Y alguno dirá: “Ya, pero eso en Symfony también existe”. Sí, pero con Django es mucho más sencillo, lo digo por experiencia. Olvídate de anotaciones ni ficheros de configuración en formato yml que no se pueden depurar.

Si ya conoces Python, la estructura del proyecto ya la conoces. Con Symfony casi te obliga a crear una estructura fija. “Aquí el código fuente, en esta otra carpeta la configuración, en la siguiente las librerías o módulos…” Con Django lo puedes hacer como te venga en gana. Por supuesto hay un “libro de estilo” que te recomienda cómo hacerlo, pero no es más que módulos de python que Django llama aplicaciones, un fichero views.py para las vistas, urls.py para las direcciones y models.py para los modelos… nada más.

La documentación de Django es excelente, creo que es de lo mejor que he visto. Y su “getting Started” es súper fácil y completo.

Seguro, incluso sin darte cuenta

Cuando se desarrolla cualquier tipo de software, la seguridad es lo más importante y, a la vez, lo más complicado. En aplicaciones webs creadas con node.js, ya sean con Express.js o con Meteor.js, todo lo relativo a la seguridad corre a cuenta del desarrollador. XSS, CSRF o gestión de sesiones el que está a este lado del ordenador será el responsable de crear y buscar un método, implementarlo, depurarlo y testearlo. Cierto que existen mil librerías y módulos para esto, pero, hay que buscarse la vida.

En Django no te tienes que complicarte porque ya lo tiene. Por ejemplo, algo tan complicado de gestionar en otros sistemas como evitar los ataques CSRF, en Django se soluciona añadiendo a tu formulario la etiqueta csrf_token

<form>
    {% csrf_token %}
    ...

Y así todo:

  • Cross Site Scripting (XSS)
  • Cross Site Requests Forgery (CSRF)
  • SQL Injections
  • Broken Authentication & Session Management
  • Insecure Direct Object References

Y muchas más… Y la mayoría son gestionadas y funcionan sin darte cuenta.

Potente

Ojo, con potente no quiero decir rápido… que ya estás apunto de tirarte a mi yugular para apuntar que javascript con node.js es un millón de veces más rápido.

Como he dicho, Django usa Python y sí… Python no es tan rápido como Java o como Javascript. Incluso dicen que las últimas versiones de PHP llegan a ser tanto o más rápido que Python. Ejem! Ejem!

Dicho esto hazte una pregunta, ¿cómo es posible que el boom de tecnologías tales como el Big data, Internet de las cosas, Blockchain o Inteligencia artificial de estos últimos años vengan acompañados de Python? Existen multitud de utilidades, librerías, módulos y aplicaciones creados en Python para estas ciencias. Esta semana misma, hemos creado en mi empresa un sistema de reconocimiento facial con Python. ¿Acaso se podía hacer con PHP? ¿Y con javascript? Y no sólo ha sido sencillo de hacer, ¡ha sido hasta divertido!

No me veo montando una aplicación de reconocimiento facial con Electron…

Posiblemente sea la persona menos imparcial del mundo para hablar de este tema. Llevo ya muchos años trabajando en esto y, la verdad, creo que no tengo necesidad de pasar fatigas usando un framework con el que no me sienta cómodo. Por eso, querido lector, toma mis palabras como lo que son, una humilde opinión de su seguro servidor.