Comunidad de diseño web y desarrollo en internet online

Django 1.7: Lo nuevo y mejor del framework Python

Apenas la semana pasada se lanzó la nueva versión estable de Django 1.7. En este artículo te contamos sobre sus rasgos más sobresalientes por Harvey Forero, dev y profesor del Curso Profesional de Backend de Mejorando.la

Python es el lenguaje de programación más popular del mundo hoy en día y Django es, sin duda alguna, el framework basado en Python más usado. Cuenta con una comunidad muy grande y activa y su interfaz de administración es muy poderosa.

Por toda la expectativa que han generado durante casi un año de desarrollo me atrevería a decir que Django 1.7 es la versión más esperada de este framework hasta ahora. También hay que tener en cuenta que es un framework que cada vez tiene más adeptos, seguidores y colaboradores, por lo que con cada release aumenta más su expectativa.



Hay muchos, muchísimos cambios y características que introdujeron en esta versión. Voy a centrarme en los que para mí son los más importantes. Todos los cambios, las características y funciones que ya no soportan desde esta versión las pueden encontrar en la página oficial.

Nuevo sistema de migraciones


Sin duda alguna la novedad más grande e importante de esta versión es el nuevo sistema de migraciones. Si ya has trabajado con Django estoy seguro de que conocerás South y de lo importante que era tenerlo desde el principio de los proyectos, ya que nos facilita el cambio de nuestra base de datos, tanto en su estructura como en los datos.
Los desarrolladores principales de Django se dieron cuenta de lo importante que era esto y de la necesidad que se tenía de que estas migraciones fueran parte del propio framework y no de una librería externa.
Django Schema Migrations hace exactamente lo que ya conocíamos con South podemos hacer schema migrations (cambios en la estructura de las tablas) y data migrations (cambios en los datos de las tablas).
La verdad se comporta igual que South, no esperen ver grandes diferencias aparte de que no tenemos que instalar otra librería para esto. El cambio que vale la pena resaltar es cómo son los archivos “migraciones”:



A diferencia de South estos archivos se ven mucho más limpios y entendibles, lo que alienta a crear nuestras propias migraciones ya sean de esquema o de datos.
También nos permite hacer algo llamado squashing, que lo que hace es unir varios archivos de migraciones en uno sólo, así, en vez de tener 10 archivos de migrations podemos tener todos los cambios en uno sólo.

QuerySets


Esta es otra característica que me ha gustado mucho y que hacía falta para nuestros proyectos. Se trata de los querysets. Son aquellas funciones que usamos diariamente y que nuestro Manager del modelo se encargaba de lanzar. La más conocidas son filer, get, get_or_create, create, order_by, all.
Tal vez aquellos que apenas están empezando en el mundo de Django no sabrán que pueden hacer sus propios querysets para hacer filtros o serializar los datos.

También sabemos que podemos encadenar los querysets. MyModel.objects.filter(active=True).exclude(color=’orange’).order_by(‘price’). El problema que teníamos es que luego de llamar nuestro propio queryset es que no podíamos encadenarlo con nada más. Debía ser la última llamada que se hacía, por lo que no podíamos filtrar u ordenar o llamar otro queryset que hubiésemos creado.
Otro problema que se nos presentaba es que para hacer el queryset teníamos que declarar nuestro propio manager que se encargaba de lanzar el queryset.



Ahora con Django 1.7 todo eso cambió. Esta nueva versión nos permite crear nuestros propios querysets sin necesidad de crear un manager intermedio ¡y se pueden anidar!



Con esto podemos hacer un llamado MyModel.objects.oranges().active().order_by(‘-pk’) sin ningún problema, lo que nos ahorra código y nos permite tenerlo más organizado.

Admin de Django


Obviamente este gran feature de Django no podía quedar excluido de cambios y mejoras. La que más me gustó también va de la mano de organizar y simplificar el código. Digamos que no conlleva nuevas características pero sí facilita el registro de modelos en el admin.
Antes para personalizar la administración de un modelo en nuestro django admin, teníamos que hacer algo así.



Noten la línea número 10. Es la que registra el modelo con su administrador en el django admin. No se ve tan mal si sólo tenemos un modelo, pero si tenemos muchos más, esas líneas empiezan a ser más y más. Normalmente organizadas al final de nuestro archivo admin.py, por lo que si queríamos ver ese admin a qué modelo representa o si estaba declarado teníamos que ir hasta el final para revisar y volver a subir para seguir trabajando.
Django 1.7 nos ha traído una mejora en este aspecto. Un decorator para registrar nuestros modelos.



Lo que hace más legible el código, organizado y potente. Ahora en un sólo decorator podemos registrar varios Modelos que tengan los mismos campos.

El nuevo JSONResponse


Otra de las cosas nuevas que nos van a facilitar mucho la interacción con AJAX es un nuevo tipo de respuesta llamada JSONResponse (por favor ahora no digan jota-son response).
Este tipo de respuesta tiene como finalidad evitarnos hacer un dump de los datos con JSON, enviarlos en un HttpResponse y establecer el content_type como application/json.



Ahora sólo tenemos que pasar una lista o un diccionario de Python y JSONResponse se encarga de pasarlo a formato JSON y enviar en los headers de la respuesta que se trata de una respuesta JSON.

Archivos Estáticos


Para los que hemos tenido la oportunidad de hacer deploy de nuestros proyectos sabemos lo que es lidiar con el caché de los archivos estáticos. Sobre todo si hemos usado servicios cloud como el de Amazon S3.
Uno de los problemas es que el caché de estos archivos (*.js, *.css, imagenes) es bastante alto, por lo que si hacemos un cambio rápido no lo vamos a ver inmediatamente porque el caché se encarga de seguir sirviendo el archivo anterior sin el cambio.

Para este problema Django nos da una solución y es ponerle un hash al archivo estático para que cuando hagamos un cambio y posteriomente collectstatic este hash cambie y el navegador traiga el nuevo archivo. Por ejemplo, si tenemos un archivo estilo.css el Storage Backend de Django llamado CachedStaticFileStorage se encarga de crear un archivo llamado estilo.983hd638dea9.css. Si hacemos un cambio en estilo.css y le damos collectstatic entonces Django crea otro archivo con otro hash estilo.7hd23sa5e.css y se encarga de saber que estilo.css apunta a estilo.7hd23sa5e.css y no a estilo.983hd638dea9.css.

Para saber cuál archivo debe cargar Django se ayuda de un sistema de caché como puede ser Redis que le ayuda a mapear estos archivos.
En Django 1.7 se creó otro Storage Backend llamado ManifestStaticFileStorage que hace exactamente lo mismo que CachedStaticFileStorage pero no necesita un sistema de caché sino que genera un archivo llamado staticfiles.json que es el que se encarga de saber cuál es el último hash que debe cargar para nuestros archivos estáticos.

Conclusión


Como dije al principio estas son apenas unas pocas características nuevas que nos trae Django 1.7. Pero sin duda es un gran avance y mejora sobre este gran framework. Me gusta mucho hacia dónde está avanzado, siempre fiel a su filosofía de hacer desarrollo rápido, fácil y legible.

Si tienen un proyecto que quieren empezar, esta es una gran versión para hacerlo. Para los que ya tenemos un proyecto con una versión anterior de Django nos toca un poco más de trabajo migrar a la nueva versión pero con todo lo que hemos visto y todo lo que trae vale la pena hacerlo.

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

El autor de este artículo ha cerrado los comentarios. Si tienes preguntas o comentarios, puedes hacerlos en el foro

Entra al foro y participa en la discusión

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate