Cómo se utiliza Python y Django en Mejorando.la
Seguramente conoces Mejorando.la, es el proyecto web de Maestros y Cristalab. Comenzó como programa online una vez por semana y ahora se ha expandido con cursos presenciales alrededor de latinoamérica y tres conferencias con alcance mundial.
Leonidas Esteban, Renzo Avalos y Adan Sanchez son quienes hace unos meses estuvieron trabajando para lograr el sitio que hoy se puede disfrutar al ingresar a Mejorando.la. Para lograrlo hubo todo un proceso de rediseño y reprogramación que fue posible gracias a varias herramientas y servicios que con la ayuda de Adan Sanchez te contaré a continuación.
Python y Django: Lenguaje y framework de la magia
“Al momento de planear el rediseño y reprogramacion de un sitio es importante identificar bien sus elementos y componentes principales para crear los modelos necesarios y una buena estructura” es lo primero que resaltó Adán Sanchez. Y hablando especificamente de Mejorando.la hay que destacar que el componente principal son los videos. Desde ahí parten todas las funciones que se van agregando al sitio.
Python es el lenguaje y Django es el framework detrás del sitio de Mejorando.la. Nos cuenta Adán que gracias a la flexibilidad que ofrece, se pudo realizar la reprogramación y rediseño del sitio en pocos días: “Digamos que Django se ha vuelto prácticamente un estándar como framework para desarrollo ágil.”
Es especialmente recomendado para un proyecto grande desarrollado por un equipo pequeño o cuando se trata de un sitio para entregar en pocos días.
Al consultar por qué la elección de Django y no otro, nos explicó que “Django era la solución principal, puesto que si bien wordpress es muy flexible, en Django hay aun mas flexibilidad.”
Un framework con baterías incluídas
Django trae lo que en Python se conoce como “baterías incluidas”. Desde clases para tareas sencillas como paginación, geolocalización, autentificación y caché hasta componentes bastante completos como el módulo de comentarios, notificaciones, administrador, internacionalización y feeds.
Adán explica que un sitio en Django es más limpio puesto que python tiene una estructura modular, agrega que “en otros lenguajes hay que descargarse muchos archivos y el tener tantos archivos en el directorio puede hacer mas dificil manejar el sitio”. Para “graficar” la facilidad con la que se activan estos módulos desde el archivo de configuración, nos mostró el código correspondiente:
INSTALLED_APPS = ( 'django.contrib.auth', # funciones de autentificacion 'django.contrib.comments', # funciones para agregar comentarios a los modelos 'django.contrib.admin', # administrador autogenerado )
Además afirma que es muy fácil encontrar un módulo en los repositorios para aquellas funcionalidades que no vienen incluidas en Django, un ejemplo de ello es el modulo Gravatar que se utiliza en Mejorando.la para los avatares de los comentarios.
Modelo-Vista-Controlador
“Un punto más a favor de Django es el patrón Modelo-Vista-Controlador que maneja, esto quiere decir que separas tu aplicación en tres componentes”, explicó Adán. El modelo principal en este caso seria Video, en donde un “video” tiene titulo, imagen, descripcion, comentarios.
Para entender mejor puedes ver el tercer capitulo de la guia Django y luego ver estos ejemplos:
Modelo: son los datos, en el sitio se tiene un modelo para los Videos.
Ejemplo de modelo
class Video(models.Model): titulo = models.CharField() slug = models.CharField() imagen = models.ImageField() fecha = models.DateField() descripcion = models.TextField()
Vista: sería la presentación de este modelo, en Django entra en los templates, que reciben los datos del controlador. Hay una plantilla para cada vista: home.html, videos.html, video.html, heredando de base.html gracias al poderoso sistema de plantillas de Django.
Controlador: se encarga de elegir los datos que se van a mostrar y hacer el procesamiento que haga falta en estos, validacion y condicionamientos. En Mejorando.la hay un controlador para cada página: home, archivo de videos y página de video.
Ejemplo de controlador
def video(solicitud_http, video_slug): video = get_object_or_404(Video, slug=video_slug) return render_to_response('website/video.html', { 'video': video })
Unidad, código limpio y filtros.
La unidad que existe en toda la plataforma es una de las caracteristicas que más le gustó a Adán: “cualquier método que defina en un modelo estará presente tanto en el controlador como en las plantillas.”
“Los modelos de Django permiten abstraer lo que tradicionalmente se haría con SQL en clases y funciones. Esto permite tener un código más limpio.”
Por ejemplo:
SQL SELECT titulo, descripcion, imagen FROM videos ORDER BY fecha LIMIT 10
Django
Video.objects.all().order_by(‘-fecha’)[:10]
Nos comentó también que en las plantillas de Django se hace uso de la rica cantidad de filtros que pone a disposición, desde convertir a mayúsculas, eliminar etiquetas html y agregar saltos de línea.
Gracias a estos filtros es más fácil tener una clara separación entre datos, lógica y presentación.
Sólo un comienzo
Cómo te imaginarás el proceso de rediseño y reprogramación de un sitio como Mejorando.la no se puede comentar y explicar en detalle en tan sólo un artículo, sin embargo en una proxima publicación con Adán te contaremos más funcionalidades y caracteristicas que hacen de python un lenguaje fácil de aprender y de Django el framework ideal para perfeccionistas.
Interesantísimo… me da más panorama de todo el proceso y me gusta que en esta comunidad se tenga la filosofía de compartir los proyectos en su sentido operativo, para que todos mejoremos y seamos profesionales de calidad.
Gracias por eso. Saludos
[:10] Realmente hace “LIMIT 10” o solo es la manera de acceder a las variables en python? Es que si es una manera de simular el LIMIT no sería una buena práctica.
Hace unas semanas vengo luchando para decidir entre Python y Ruby
Lo que amo de Django principalmente es el motor de plantillas, me llevo bien con él (uso Twig, lo que me permite tener esa sintaxis en php)
Mas que MVC, Jacob Kaplan-Moss indica que es un framework (MTV) Model – Template – View por lo siguiente:
M representa “Modelo”, la capa de acceso a datos. Esta capa contiene cualquier cosa y todo acerca de los datos: cómo acceder a él, la forma de validar, cuáles son los comportamientos que tiene, y las relaciones entre los datos.
T significa “template Plantilla”, la capa de presentación. Esta capa contiene las decisiones relacionadas con la presentación: cómo algo que se debe mostrar en una página Web u otro tipo de documento.
V significa “View”, la capa de lógica del negocio. Esta capa contiene la lógica que tiene acceso al modelo y se remite a la plantilla correspondiente(s).
Saludos!
¡Hola Álvaro! A diferencia de lo que podría parecer: “Que de todo un array de resultados devueltos tome X”, esto no es lo que sucede. Realmente hace “LIMIT 10”, internamente te regresa un nuevo QuerySet.
Cabe mencionar que en Django no hay interacción con la base de datos, hasta que se utilizan verdaderamente los datos.
¡Saludos!
Muy buena la observación.
MTV solo es un “alias”, ya que entre MVC y MTV no tenemos ninguna diferencia más que los nombres. Pero el patrón es exactamente el mismo. Es bueno tenerlo claro.
¡saludos!
Yo estoy seguro que MTV le da un enfoque mas flexible !! a pesar de que son casi lo mismo la diferencia es pequeña pero grande !!
Hola, no se me hace raro que hayan rediseñado y reprogramado todo el sitio en unos días, ya estoy probando python con django y es ridiculamente sencillo! se desarrolla más rápido, el lenguaje es más fácil de entender, es muy flexible, y gracias a Django ya no hay que preocuparse en cómo crear componentes de sesiones, componentes del backend, etc.
Ruby también es un buen lenguaje de desarrollo, fácil de aprender y muy recomendado para desarrollo ágil, aunque a mi me sigue gustando más python, no tendría problema en utilizar alguno de los dos lenguajes.
Saludos!
Lamento contradecirte pero esto reposa en la documentación oficial del proyecto así que no es ningún alias, es la filosofía del framework pues MTV va mas allá que el simple MVC, te dejo la referencia para que la revises: https://docs.djangoproject.com/en/dev/faq/general/
Django appears to be a MVC framework, but you call the Controller the “view”, and the View the “template”. How come you don’t use the standard names?
Well, the standard names are debatable.
In our interpretation of MVC, the “view” describes the data that gets presented to the user. It’s not necessarily how the data looks, but which data is presented. The view describes which data you see, not how you see it. It’s a subtle distinction.
So, in our case, a “view” is the Python callback function for a particular URL, because that callback function describes which data is presented.
Furthermore, it’s sensible to separate content from presentation – which is where templates come in. In Django, a “view” describes which data is presented, but a view normally delegates to a template, which describes how the data is presented.
Where does the “controller” fit in, then? In Django’s case, it’s probably the framework itself: the machinery that sends a request to the appropriate view, according to the Django URL configuration.
If you’re hungry for acronyms, you might say that Django is a “MTV” framework – that is, “model”, “template”, and “view.” That breakdown makes much more sense.
At the end of the day, of course, it comes down to getting stuff done. And, regardless of how things are named, Django gets stuff done in a way that’s most logical to us.
Disculpen que me entrometa pero todos sabemos que MTV es un canal de televisón que pasa reality shows y que en los 90s era popular por poner videos musicales.
Ya en serio, siempre se aprende algo nuevo, muchas gracias.
ajajajaja excelente apunte Christian 😉 me hiciste reír bastante..!!!!
Buen aporte!
No entendo para quémsirve este lenguaje enla practica co de una persdona común. ¿Podrían explicarmelo? Gracias