Está en la página 1de 10

Introduccin a Django

Si se dirige a la pgina web djangoproject.com utilizando su navegador web o,


dependiendo de la dcada en la que est leyendo este trabajo literario destinado a ser eterno,
utilizando su telfono mvil, agenda electrnica, zapato o cualquier cacharro que suplante a
Internet, se encontrar con esta explicacin:
Django es un framework web de alto nivel en Python que fomenta el desarrollo rpido y el
diseo limpio y pragmtico.
Eso es un gran bocado o un gran vistazo, o un gran puado de pxeles, dependiendo de si
este libro se est recitando, leyendo en papel o proyectndose en un Jumbotrn,
respectivamente.
Descompongmoslo.
Django es un framework web de alto
nivel...
Un framework web es un software que alivia el sufrimiento derivado de construir pginas
web dinmicas. Abstrae problemas comunes al desarrollo web y proporciona atajos para
tareas de programacin frecuentes.
Para los lectores que han llegado tarde a la fiesta: un sitio web dinmico es uno en el que
las pginas no son simplemente documentos HTML colocados en algn lugar del sistema
de ficheros de un servidor. En cambio, en un sitio web dinmico, cada pgina la genera un
programa de computador una famosa "aplicacin web" que usted, el desarrollador
web, crea. Por ejemplo, una aplicacin web podra obtener registros de una base de datos o
realizar alguna accin basndose en la entrada del usuario.
Un buen framework web resuelve los siguientes problemas:
Proporciona un mtodo para hacer corresponder peticiones URL con el cdigo que
maneja las peticiones. En otras palabras, le otorga una manera de designar qu
cdigo se ejecutar para cada URL. Por ejemplo, se le podra decir al framework:
"Para las URLs que se parezcan a /users/joe/, ejecuta el cdigo que muestre el perfil
del usuario con ese nombre de usuario".
Facilita mostrar, validar y volver a mostrar formularios HTML. Los formularios
HTML son la principal manera de obtener datos de entrada de los usuarios web, as
que ms le vale a un framework web facilitar la representacin de formularios y el
manejo del cdigo tedioso para mostrar y volver a mostrar formularios (resaltando
los errores).
Convierte la entrada que enva el usuario en estructuras de datos que se pueden
manipular cmodamente. Por ejemplo, el framework podra convertir los datos de
un formulario HTML en tipos de datos nativos al lenguaje de programacin que se
est utilizando.
Ayuda a separar el contenido de la presentacin mediante un sistema de plantillas,
de manera que se pueda cambiar el aspecto de un sitio web sin afectar al contenido,
y viceversa.
Se integra cmodamente con las capas de almacenamiento como las bases de
datos pero no exije estrictamente el uso de una base de datos.
Le permite trabajar ms productivamente, a un nivel de abstraccin mayor que si
estuviera programando usando, digamos, HTTP. Pero no le prohbe ir un nivel de
astraccin "hacia abajo" cuando sea necesario.
Se aparta de su camino, evitando llenarle la aplicacin de manchas sucias, como
URLs que contengan ".aspx" o ".php".
Django hace todas estas cosas bien; y presenta una serie de caractersticas que elevan el
listn de lo que debera ser un framework web.
El framework est escrito en Python, un lenguaje de programacin bonito, conciso, potente
y de alto nivel. Para desarrollar un sitio utilizando Django hay que escribir cdigo Python
que utiliza las bibliotecas de Django. Aunque este libro no incluye un tutorial completo de
Python, s llama la atencin sobre caractersticas y funcionalidades de Python cuando es
procedente, especialmente cuando el cdigo no tiene sentido de forma inmediata.
...que promueve el desarrollo rpido...
A pesar de lo potentes que sean sus caractersticas, un framework web carece de valor si no
consigue ahorrarle tiempo. La filosofa de Django es hacer todo lo posible por facilitar el
desarrollo hiper rpido. Con Django se construyen sitios web en cuestin de horas, no das;
semanas, no aos.
Esto es en gran parte posible gracias al propio Python. Oh, Python, cunto te amamos,
contemos tus puntos importanes:
Python es un lenguaje interpretado, lo que quiere decir que no hace falta compilar
el cdigo. Slo hay que escribir el programa y ejecutarlo. En el desarrollo web, esto
significa que se puede desarrollar cdigo y ver los resultados inmediatamente
dndole a "recargar" en el navegador web.
Python tiene tipado dinmico, lo que quiere decir que no hace falta preocuparse de
declarar los tipos de datos de las variables.
La sintaxis de Python es concisa pero expresiva, lo que quiere decir que hace falta
menos cdigo para llevar a cabo una tarea que en otro lenguajes ms verbosos como
Java. Una lnea de Python suele equivaler a 10 lneas de Java. (Esto tiene un
oportuno beneficio colateral: menos lneas de cdigo significan menos bugs.)
Python ofrece medios poderosos de introspeccin y metaprogramacin que
hacen posible inspeccionar y modificar el comportamiento de los objetos en tiempo
de ejecucin.
Ms all de las ventajas en productividad inherentes a Python, el propio Django hace todo
lo posible para fomentar el desarrollo rpido. Todas las partes del framework se disearon
con la productividad en mente. Veremos ejemplos a lo largo de este libro.
...y el diseo limpio y pragmtico
Finalmente, Django mantiene de forma rigurosa un diseo limpio en su propio cdigo, y
facilita que el programador siga las mejores prcticas de desarrollo web en las aplicaciones
que crea.
Esto significa que, si pensamos que Django es un coche, sera un elegante coche deportivo,
capaz no slo de alcanzar grandes velocidades y atacar curvas cerradas, sino tambin de
ofrecer una excelente autonoma y emisiones limpias.
Aqu la filosofa es: Django facilita hacer las cosas de la manera "correcta".
Concretamente, Django fomenta el bajo acoplamiento: la filosofa de programacin que
dice que las distintas partes de la aplicacin deben ser intercambiables y deben comunicarse
unas con otras mediante APIs claras y concisas.
Por ejemplo, el sistema de plantillas no sabe nada sobre el sistema de acceso a bases de
datos, que no sabe nada de la capa de peticin/respuesta HTTP, que no sabe nada acerca del
cacheo. Todas estas capas estn diferenciadas y acopladas holgadamente con el resto. En la
prctica, esto significa que se pueden mezclar y combinar las capas si es necesario.
Django sigue la arquitectura del "modelo-vista-controlador" (MVC). Dicho de forma
sencilla, esto es una manera de desarrollar software para que el cdigo para definir y
acceder a los datos (el modelo) est separado de la lgica de negocio (el controlador), que a
su vez est separada de la interfaz de usuario (la vista).
El MVC se explica mejor con un ejemplo de lo que no hay que hacer. Por ejemplo, chele
un vistazo al siguiente cdigo en PHP, que obtiene una lista de personas de una base de
datos MySQL y devuelve la lista mediante una sencilla pgina HTML (s, somos
conscientes de que es posible que los programadores disciplinados escriban cdigo limpio
en PHP; simplemente estamos usando el PHP para ilustrar una idea):
<html>
<head><title>Mis amigos</title></head>
<body>

<h1>Mis amigos</h1>

<ul>

<?php
$conexion = @mysql_connect("localhost", "mi_usuario", "mi_contrasea");
mysql_select_db("mi_basededatos");
$personas = mysql_query("SELECT nombre, edad FROM amigos");
while ( $persona = mysql_fetch_array($personas, MYSQL_ASSOC) ) {
?>
<li>
<?php echo $persona['nombre'] ?> tiene <?php echo $persona['edad'] ?>
aos.
</li>
<?php } ?>

</ul>

</body>
</html>
Aunque este cdigo es conceptualmente sencillo para los principiantes porque todo est
en un mismo fichero, es un ejemplo de mala prctica, por varias razones:
1. La presentacin est vinculada al cdigo. Si un diseador quisiera editar el
HTML de esta pgina, tendra que editar este cdigo, porque el el HTML y el PHP
estn entrelazados.
En contraste, el enfoque MVC de Django fomenta la separacin entre el cdigo y la
presentacin, de manera que la presentacin est gobernada por plantillas y la lgica
de negocio reside en mdulos de Python. Los programadores se ocupan del cdigo
y los diseadores se ocupan del HTML.
2. El cdigo relativo a bases de datos est vinculado a la lgica de negocio. Esto es
un problema de redundancia: si se renombran las tablas o columnas de la base de
datos, ser necesario reescribir el SQL.
En contraste, el enfoque MVC de Django fomenta el uso de una sola capa de acceso
a datos abstrada, responsable de todo el acceso a los datos. En el caso de Django, la
capa de acceso a datos conoce los nombres de las tablas y las columnas de la base
de datos, y permite ejecutar sentencias SQL mediante Python en lugar de escribir
SQL directamente. Esto significa que si cambia el nombre de las tablas de la base de
datos, slo hace falta cambiarlo en un sitio en la definicin del modelo de datos
, en lugar de tener que cambiar todas las sentencias SQL desperdigadas por el
cdigo.
3. La URL est unida al cdigo. Si este fichero PHP reside en /foo/index.php, se
ejecutar con todas las peticiones a esa direccin. Pero, y si quiere que se ejecute el
mismo cdigo para las peticiones a /bar/ y /baz/? Tendra que configurar una
serie de "includes" o reglas de reescritura, algo que rpidamente se hace
inmanejable.
En contraste, Django desvincula las URLs del cdigo que se llama, de manera que
siempre se pueden cambiar las URLs que llaman a un cierto trozo de cdigo.
4. Los parmetros de conexin a la base de datos estn *"hard-coded"*. Es sucio
tener que especificar la informacin de conexin el servidor, el nombre de
usuario y la contrasea dentro de este cdigo, porque es configuracin, no lgica
de programacin. Adems, este ejemplo tambin tiene "hard-coded" el hecho de que
el motor de bases de datos es MySQL.
En contraste, Django slo tiene un lugar para almacenar la configuracin, y la capa
de acceso a bases de datos est abstrada, de manera que es sencillo cambiar de
servidor de base de datos (digamos, de MySQL a PostgreSQL).
Lo que no hace Django
Por supuesto, queremos que este libro sea justo y equilibrado. Con eso en mente, tenemos
que ser honestos y resumir lo que no hace Django:
Alimentar a su gato.
Leer de su mente los requisitos del projecto e implementarlos en un tiempo
razonable para engaar a su jefe y hacerle creer que en realidad no se ha quedado en
su casa para ver "El precio justo".
Hablando ms seriamente, Django todava no invierte los efectos del calentamiento global.
Por qu se desarroll Django?
Las races de Django se encuentran en los problemas y soluciones del Mundo Real. No fue
creado para promocionarlo y venderlo a los desarrolladores, ni tampoco fue creado como
ejercicio acadmico durante el tiempo libre de alguien. Fue construido, desde el primer da,
para resolverle problemas diarios a un equipo de desarrollo web en la vanguardia de la
industria.
Comenz en el otoo de 2003, en un peridico de pueblo en Lawrence, Kansas.
Por una razn u otra, el peridico Lawrence Journal-World consigui atraer a un talentoso
grupo de diseadores y desarrolladores web a principios de la dcada 2000. La divisin
web del peridico, World Online, se convirti rpidamente en una de las divisiones web de
un peridico ms innovadoras del mundo. Sus tres sitios principales, LJWorld.com
(noticias), Lawrence.com (entretenimiento/msica) y KUsports.com (deporte universitario),
empezaron a ganar premio tras premio en la industria del periodismo en lnea. Sus
innovaciones fueron muchas, incluyendo:
La pgina de entretenimiento local ms exhaustiva del mundo, Lawrence.com, que
ana bases de datos locales de eventos, bandas, restaurantes, bebidas especiales,
canciones descargables y noticias en formato tradicional.
Una seccin veraniega de LJWorld.com dedicada a los jugadores de las liguillas
locales, que los trataba como si fueran los New York Yankees proporcionando
una pgina para cada equipo y liga, obteniendo datos meteorolgicos para mostrar
pronsticos para los partidos, ofreciendo panoramas de 360 grados de todos los
campos de juego de los alrededores y alertando a los padres de las cancelaciones de
los partidos mediante mensajes a telfonos mviles.
Alertas a telfonos mviles sobre los partidos de baloncesto y ftbol americano de
la Universidad de Kansas, que permita a los aficionados estar al tanto de las
puntuaciones y estadsticas clave durante los partidos, y un segundo sistema que
utilizaba algoritmos de inteligencia artificial que permita a los aficionados enviar
mensajes en ingls al sistema para consultar la base de datos ("cuntos puntos llevan
los giddens" o "pts giddens").
Una exhaustiva base de datos con todas las estadsticas imaginables sobre el ftbol
americano y el baloncesto universitarios, incluyendo un medio para comparar
cualquier grupo de jugadores o equipos de la NCAA.
Proporcionando blogs a los miembros de la comunidad y promocionando de forma
prominente los contenidos de la comunidad antes de que los blogs estuvieran de
moda.
Muchos expertos del periodismo en el mundo searalon a World Online como ejemplo del
futuro del periodismo. El New York Times public una noticia sobre la empresa en la
portada de la seccin de negocios; la National Public Radio emiti una serie de dos das
sobre ella. El director editorial de World Online, Rob Curley, dio charlas casi
semanalmente en conferencias de periodismo por todo el planeta, exponiendo las ideas
innovadoras y las caractersticas del sitio web de World Online. En una industria lbrega y
anticuada reacia a los cambios, World Online era una rara excepcin.
Gran parte del xito de World Online fue debido a la tecnologa que haba detrs de sus
pginas, y a la filosofa que dice que los programadores informticos son igual de
importantes que los propios periodistas a la hora de crear periodismo de calidad del siglo
XXI.
Por esto se desarroll Django: los desarrolladores de World Online necesitaban un
framework para desarrollar sitios web complejos sobre bases de datos de forma indolora,
fcil y con los plazos temporales del periodismo.
En otoo de 2003, dos desarrolladores de World Online, Adrian Holovaty y Simon
Willison, se pusieron a crear este framework. Decidieron utilizar Python, un lenguaje del
que se haban enamorado recientemente. Tras explorar (y quedar decepcionados con) las
libreras de programacin web disponibles en Python, empezaron a crear Django.
Dos aos ms tarde, en verano de 2005, tras haber desarrollado Django hasta un punto en el
que ya mova la mayora de los sitios de World Online, el equipo de World Online, que ya
inclua a Jacob Kaplan-Moss, decidi que sera una buena idea liberar el framework. De esa
manera retribuiran a la comunidad del software libre, obtendran mejoras gratis de
desarrolladores externos, y generaran cierta publicidad para su sistema de gestin de
contenidos comercial, Ellington (http://www.ellingtoncms.com/). Django se liber en julio
de 2005 y rpidamente se hizo popular.
Aunque Django es un proyecto de software libre con colaboradores en todo el mundo, los
desarrolladores originales de World Online siguen proporcionando las principales
directivas para el crecimiento del framework, y World Online contribuye con otros aspectos
importantes como tiempo laboral, material publicitario y alojamiento/ancho de banda para
la pgina web del framework (http://www.djangoproject.com/).
Quin usa Django?
Muchos desarrolladores web de todo el mundo utilizan Django. Algunos ejemplos
concretos:
Por supuesto, World Online sigue utilizando Django para todos sus sitios web, tanto
internos como los de los clientes comerciales. Algunos de sus sitios que corren con
Django son:
http://www.ljworld.com/
http://www.lawrence.com/
http://www.6newslawrence.com/
http://www.visitlawrence.com/
http://www.lawrencechamber.com/
http://www2.kusports.com/stats/
La pgina web del Washington Post, washingtonpost.com, utiliza Django para sus
proyectos con bases de datos, y varias pizcas de funcionalidad por todo el sitio.
Algunos ejemplos:
La base de datos de los votos del Congreso de EEUU:
http://projects.washingtonpost.com/congress/
El directorio de personal y la funcionalidad que permite a los lectores
contactar con los periodistas, que aparece como un enlace en la mayora de
los artculos.
Faces of the Fallen: http://projects.washingtonpost.com/fallen/
Chicagocrime.org, una base de datos de libre acceso sobre los crmenes que se
producen en Chicago y una de las primeras aplicaciones externas basadas en Google
Maps, fue desarrollada en Django.
Tabblo.com, una innovadora web de comparticin de fotos, utiliza Django. La
pgina le permite juntar sus fotografas para crear lbumes de fotos que cuentan
historias.
Texasgigs.com, un sitio de msica local de Dallas, Texas, fue escrito en Django.
Grono.net, una red social polaca, comenz a sustituir su cdigo en Java por Django.
Descubrieron que no solo era ms rpido de desarrollar (y ms divertido), sino que
proporcionaba mayor rendimiento que Java y requera menos recursos de hardware.
Traincheck.com fue desarrollada en Django. Esta web le permite enviar mensajes de
texto desde su telfono mvil para obtener los horarios de metro relativos al lugar
donde se encuentre.
Existe una lista actualizada con las docenas de sitios que utilizan Django en
http://code.djangoproject.com/wiki/DjangoPoweredSites
COMO CREAR EL PRIMER
PROYECTO Y EJECUTARLO?
Antes de empezar es bueno aclarar que la versin que vamos a utilizar en esta gua es la
ms reciente (1.4), y varias cosas han cambiado, la informacin que podran encontrar en
Internet probablemente se encuentre desactualizada.
Para crear nuestro primer proyecto, abrimos una terminal (o ventana de comandos si asi lo
conoces en windows), nos ubicamos en la carpeta en donde queremos crear nuestro
proyecto y digitamos:
django-admin.py startproject recetario
Esta instruccin crear dos directorios con el nombre del proyecto (en este caso: recetario)
y 5 archivos distribuidos de la siguiente manera:
manage.py
recetario
o __init__.py
o settings.py
o urls.py
o wsgi.py
Para ver que el proyecto est funcionando en la terminal debemos escribir:
python manage.py runserver
Al ejecutar esa instruccin debemos visualizar un resultado como el siguiente:

python manage.py runserver
Abrimos el navegador web la direccin http://127.0.0.1:8000/ y debemos ver lo siguiente:

Django http://127.0.0.1:8000
Ya tenemos nuestro proyecto creado.
En el caso de que nos salga un error porque el puerto asignado esta en uso como la
siguiente imagen:

Django en puertos en uso
slo debemos indicar que puerto usaremos para lanzar el servicio, por ejemplo si se desea
usar el puerto 8888 entonces se tendra que digitar:
python manage.py runserver 8888
Usaramos la direccin http://127.0.0.1:8888/ y tendramos como resultado lo siguiente:

Django en un puerto 8888
Cada proyecto necesita de aplicaciones donde se puedan gestionar los modelos y las vistas.
Un proyecto puede tener muchas aplicaciones: