Django, un framework de desarrollo Web
que ahorra tiempo y hace que el desarrollo Web sea divertido.
Utilizando Django puedes crear y mantener aplicaciones Web de alta
calidad con un mínimo esfuerzo.
¿Qué es un Framework Web?
Un framework Web provee una
infraestructura de programación para tus aplicaciones, para que
puedas concentrarte en escribir código limpio y de fácil
mantenimiento sin tener que reinventar la rueda.
El patrón de diseño MVC
Para entender lo que hace un framework
web como Django, consideremos el diseño de una aplicación Web
escrita en Python, sin usar un framework. Una de las formas más
simples y directas para construir una aplicación Web desde cero en
python, es usando el estándar Common Gateway Interface (CGI), una
técnica muy popular para escribir aplicaciones Web alrededor del año
1998. Esta es una explicación de alto nivel sobre cómo trabaja.
Solo crea un script Python, que produzca HTML, guarda el script en el
servidor Web con la extensión .cgi y visita la pagina con un
navegador Web. Eso ¡Eso todo!
Por ejemplo, aquí hay un sencillo
script CGI, escrito en python 2.x, que muestra los diez últimos
libros publicados en una base de datos. No te preocupes por los
detalles de la sintaxis; solo observa las cosas básicas que hace:
#!/usr/bin/env python
import MySQLdb
print "ContentType:
text/html\n"
print
print
"<html><head><title>Libros</title></head>"
print "<body>"
print "<h1>Libros</h1>"
print "<ul>"
connection = MySQLdb.connect(user='yo',
passwd='dejamentrar', db='books.db')
cursor = connection.cursor()
cursor.execute("SELECT nombre FROM
libros ORDER BY fecha DESC LIMIT 10")
for row in cursor.fetchall():
print "<li>%s</li>"
% row[0]
print "</ul>"
print "</body></html>"
connection.close()
Con una página única y poco dinámica
como esta, el enfoque desde cero no es necesariamente malo. Por un
lado, este código es sencillo de comprender – incluso un
desarrollador novato puede leer estas líneas de Python y entender
todo lo que hace el script, de principio a fin. También es sencillo
de utilizar: sólo guarda este código en un archivo llamado
ultimoslibros.cgi, sube ese archivo a un servidor Web y visita esa
página con un navegador.
Sin embargo a medida que una aplicación
Web crece más allá de lo trivial, este enfoque se desmorona y te
enfrentas a una serie de problemas:
- ¿Qué sucede cuando múltiples páginas necesitan conectarse a la base de datos? Seguro que ese código de conexión a la base de datos no debería estar duplicado en cada uno de los scripts CGI, así que la forma pragmática de hacerlo sería refactorizarlo en una función compartida.
- ¿Debería un desarrollador realmente tener que preocuparse por imprimir la línea de “Content-Type” y acordarse de cerrar la conexión con la base de datos? Este tipo de código repetitivo reduce la productividad del programador e introduce la oportunidad para que se cometan errores. Estas tareas de configuración y cierre estarían mejor manejadas por una infraestructura común.
- ¿Qué sucede cuando este código es reutilizado en múltiples entornos, cada uno con una base de datos y contraseñas diferentes? En ese punto, se vuelve esencial alguna configuración específica del entorno.
- ¿Qué sucede cuando un diseñador Web que no tiene experiencia programando en Python desea rediseñar la página? Lo ideal sería que la lógica de la página – la búsqueda de libros en la base de datos – esté separada del código HTML de la página, de modo que el diseñador pueda hacer modificaciones sin afectar la búsqueda.
Precisamente estos son los problemas
que un framework Web intenta resolver. Un framework Web provee una
infraestructura de programación para tus aplicaciones, para que
puedas concentrarte en escribir código limpio y de fácil
mantenimiento sin tener que reinventar la rueda. En resumidas
cuentas, eso es lo que hace Django.
Comencemos con un ejemplo rápido, que
demuestra la diferencia entre el enfoque anterior y el empleado al
usar un framework Web. Así es como se podría escribir el código
CGI anterior usando Django:
models.py
from django.db import models
'''Las tablas de la base de datos'''
class Libro(models.Model):
nombre =
models.CharField(max_length=50)
fecha = models.DateField()
views.py
from django.shortcuts import
render_to_response
from models import Libro
def ultimos_libros(request):
'''La parte lógica'''
lista_libros =
Libro.objects.order_by('fecha')[:10]
return
render_to_response('ultimoslibros.html', {'lista_libros':
lista_libros})
urls.py
from django.conf.urls import url
import views
# La configuración de la URL
urlpatterns = [
url(r'^ultimos_libros/$',
views.ultimos_libros),
]
ultimos_libros.html
{# La plantilla #}
<html><head><title>Libros</title></head>
<body>
<h1>Libros</h1>
<ul>
{% for libro in lista_libros %}
<li>{{ libro.nombre
}}</li>
{% endfor %}
</ul>
</body></html>
No es todavía necesario preocuparse
por los detalles sobre cómo funciona esto – tan sólo es para que te acostumbres al diseño general. Lo que hay que notar
principalmente en este ejemplo, son las cuestiones de separación:
• El archivo models.py contiene una
descripción de la tabla de la base de datos, como una clase Python.
A esto se lo llama el modelo. Usando esta clase se pueden crear,
buscar, actualizar y borrar entradas de tu base de datos usando solo
código Python en lugar de escribir declaraciones SQL repetitivas.
• El archivo views.py contiene la
lógica de la página, en la función ultimos_libros() . A esta
función se la denomina vista.
• El archivo urls.py específica qué
vista es llamada según el patrón URL. En este caso, la URL
/ultimos_libros/ será manejada por la función ultimos_libros(). En
otras palabras, si el nombre de nuestro dominio es example.com,
cualquier visita a la URL http://example.com/ultimos_libros/ llamara
a la función ultimos_libros().
• El archivo ultimos_libros.html es
una plantilla HTML especial, que describe el diseño de la página.
Usa el lenguaje de plantillas de Django, con declaraciones básicas y
lógicas por ejemplo: {% for libro in lista_libros %}.
El Modelo- Vista-Controlador define una
forma de desarrollar software en la que el código para definir y
acceder a los datos (el modelo) está separado del pedido lógico de
asignación de ruta (el controlador), que a su vez está separado de
la interfaz del usuario (la vista).
Las ventajas son obvias. Por ejemplo,
un desarrollador puede cambiar la URL de cierta parte de la
aplicación sin afectar la implementación subyacente. Un diseñador
puede cambiar el HTML de una página sin tener que tocar el código
Python que la renderiza. Un administrador de base de datos puede renombrar una tabla de la base de datos
y especificar el cambio en un único lugar, en lugar de tener que
buscar y reemplazar en varios archivos.
Tomado fielmente en forma de resumen de lo más importante del libro.
Tomado fielmente en forma de resumen de lo más importante del libro.

No hay comentarios.:
Publicar un comentario