introducción a django.docx

14
Introducción a Django Si se dirige a la página web djangoproject.com utilizando su navegador web —o, dependiendo de la década en la que esté leyendo este trabajo literario destinado a ser eterno, utilizando su teléfono móvil, agenda electrónica, zapato o cualquier cacharro que suplante a Internet—, se encontrará con esta explicación: “Django es un framework web de alto nivel en Python que fomenta el desarrollo rápido y el diseño limpio y pragmático.” Eso es un gran bocado —o un gran vistazo, o un gran puñado de píxeles, dependiendo de si este libro se está recitando, leyendo en papel o proyectándose en un Jumbotrón, respectivamente. Descompongámoslo. Django es un framework web de alto nivel... Un framework web es un software que alivia el sufrimiento derivado de construir páginas web dinámicas. Abstrae problemas comunes al desarrollo web y proporciona atajos para tareas de programación frecuentes. Para los lectores que han llegado tarde a la fiesta: un sitio web dinámico es uno en el que las páginas no son simplemente documentos HTML colocados en algún lugar del sistema de ficheros de un servidor. En cambio, en un sitio web dinámico, cada página la genera un programa de computador —una famosa "aplicación web"— que usted, el desarrollador web, crea. Por ejemplo, una aplicación web podría obtener registros de una base de datos o realizar alguna acción basándose en la entrada del usuario.

Upload: luis-galan

Post on 27-Dec-2015

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Introducción a Django.docx

Introducción a DjangoSi se dirige a la página web djangoproject.com utilizando su navegador web —o, dependiendo de la década en la que esté leyendo este trabajo literario destinado a ser eterno, utilizando su teléfono móvil, agenda electrónica, zapato o cualquier cacharro que suplante a Internet—, se encontrará con esta explicación:

“Django es un framework web de alto nivel en Python que fomenta el desarrollo rápido y el diseño limpio y pragmático.”

Eso es un gran bocado —o un gran vistazo, o un gran puñado de píxeles, dependiendo de si este libro se está recitando, leyendo en papel o proyectándose en un Jumbotrón, respectivamente.

Descompongámoslo.

Django es un framework web de alto nivel...Un framework web es un software que alivia el sufrimiento derivado de construir páginas web dinámicas. Abstrae problemas comunes al desarrollo web y proporciona atajos para tareas de programación frecuentes.

Para los lectores que han llegado tarde a la fiesta: un sitio web dinámico es uno en el que las páginas no son simplemente documentos HTML colocados en algún lugar del sistema de ficheros de un servidor. En cambio, en un sitio web dinámico, cada página la genera un programa de computador —una famosa "aplicación web"— que usted, el desarrollador web, crea. Por ejemplo, una aplicación web podría obtener registros de una base de datos o realizar alguna acción basándose en la entrada del usuario.

Un buen framework web resuelve los siguientes problemas:

Proporciona un método para hacer corresponder peticiones URL con el código que maneja las peticiones. En otras palabras, le otorga una manera de designar qué código se ejecutará para cada URL. Por ejemplo, se le podría decir al framework: "Para las URLs que se parezcan a /users/joe/, ejecuta el código 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 más le vale a un framework web facilitar la representación de formularios y el manejo del código tedioso para mostrar y volver a mostrar formularios (resaltando los errores).

Page 2: Introducción a Django.docx

Convierte la entrada que envía el usuario en estructuras de datos que se pueden manipular cómodamente. Por ejemplo, el framework podría convertir los datos de un formulario HTML en tipos de datos nativos al lenguaje de programación que se esté utilizando.

Ayuda a separar el contenido de la presentación 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 cómodamente con las capas de almacenamiento —como las bases de datos— pero no exije estrictamente el uso de una base de datos.

Le permite trabajar más productivamente, a un nivel de abstracción mayor que si estuviera programando usando, digamos, HTTP. Pero no le prohíbe ir un nivel de astracción "hacia abajo" cuando sea necesario.

Se aparta de su camino, evitando llenarle la aplicación de manchas sucias, como URLs que contengan ".aspx" o ".php".

Django hace todas estas cosas bien; y presenta una serie de características que elevan el listón de lo que debería ser un framework web.

El framework está escrito en Python, un lenguaje de programación bonito, conciso, potente y de alto nivel. Para desarrollar un sitio utilizando Django hay que escribir código Python que utiliza las bibliotecas de Django. Aunque este libro no incluye un tutorial completo de Python, sí llama la atención sobre características y funcionalidades de Python cuando es procedente, especialmente cuando el código no tiene sentido de forma inmediata.

...que promueve el desarrollo rápido...A pesar de lo potentes que sean sus características, un framework web carece de valor si no consigue ahorrarle tiempo. La filosofía de Django es hacer todo lo posible por facilitar el desarrollo hiper rápido. Con Django se construyen sitios web en cuestión de horas, no días; semanas, no años.

Esto es en gran parte posible gracias al propio Python. Oh, Python, cuánto te amamos, contemos tus puntos importanes:

Python es un lenguaje interpretado, lo que quiere decir que no hace falta compilar el código. Sólo hay que escribir el programa y ejecutarlo. En el desarrollo web, esto significa que se puede desarrollar código y ver los resultados inmediatamente dándole a "recargar" en el navegador web.

Python tiene tipado dinámico, 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 código para llevar a cabo una tarea que en otro lenguajes más verbosos como Java. Una línea de Python suele equivaler a 10 líneas de Java. (Esto tiene un oportuno beneficio colateral: menos líneas de código significan menos bugs.)

Page 3: Introducción a Django.docx

Python ofrece medios poderosos de introspección y metaprogramación que hacen posible inspeccionar y modificar el comportamiento de los objetos en tiempo de ejecución.

Más allá de las ventajas en productividad inherentes a Python, el propio Django hace todo lo posible para fomentar el desarrollo rápido. Todas las partes del framework se diseñaron con la productividad en mente. Veremos ejemplos a lo largo de este libro.

...y el diseño limpio y pragmáticoFinalmente, Django mantiene de forma rigurosa un diseño limpio en su propio código, y facilita que el programador siga las mejores prácticas de desarrollo web en las aplicaciones que crea.

Esto significa que, si pensamos que Django es un coche, sería un elegante coche deportivo, capaz no sólo de alcanzar grandes velocidades y atacar curvas cerradas, sino también de ofrecer una excelente autonomía y emisiones limpias.

Aquí la filosofía es: Django facilita hacer las cosas de la manera "correcta".

Concretamente, Django fomenta el bajo acoplamiento: la filosofía de programación que dice que las distintas partes de la aplicación 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 petición/respuesta HTTP, que no sabe nada acerca del cacheo. Todas estas capas están diferenciadas y acopladas holgadamente con el resto. En la práctica, 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 código para definir y acceder a los datos (el modelo) esté separado de la lógica 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 código en PHP, que obtiene una lista de personas de una base de datos MySQL y devuelve la lista mediante una sencilla página HTML (sí, somos conscientes de que es posible que los programadores disciplinados escriban código 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>

Page 4: Introducción a Django.docx

<?php$conexion = @mysql_connect("localhost", "mi_usuario", "mi_contraseña");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'] ?> años.</li><?php } ?>

</ul>

</body></html>

Aunque este código es conceptualmente sencillo para los principiantes —porque todo está en un mismo fichero—, es un ejemplo de mala práctica, por varias razones:

1. La presentación está vinculada al código. Si un diseñador quisiera editar el HTML de esta página, tendría que editar este código, porque el el HTML y el PHP están entrelazados.

En contraste, el enfoque MVC de Django fomenta la separación entre el código y la presentación, de manera que la presentación está gobernada por plantillas y la lógica de negocio reside en módulos de Python. Los programadores se ocupan del código y los diseñadores se ocupan del HTML.

2. El código relativo a bases de datos está vinculado a la lógica 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 abstraída, 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, sólo hace falta cambiarlo en un sitio —en la definición del modelo de datos—, en lugar de tener que cambiar todas las sentencias SQL desperdigadas por el código.

3. La URL está unida al código. Si este fichero PHP reside en /foo/index.php, se ejecutará con todas las peticiones a esa dirección. Pero, ¿y si quiere que se ejecute el mismo código para las peticiones a /bar/ y /baz/? Tendría que configurar una serie de "includes" o reglas de reescritura, algo que rápidamente se hace inmanejable.

Page 5: Introducción a Django.docx

En contraste, Django desvincula las URLs del código que se llama, de manera que siempre se pueden cambiar las URLs que llaman a un cierto trozo de código.

4. Los parámetros de conexión a la base de datos están *"hard-coded"*. Es sucio tener que especificar la información de conexión —el servidor, el nombre de usuario y la contraseña— dentro de este código, porque es configuración, no lógica de programación. Además, este ejemplo también tiene "hard-coded" el hecho de que el motor de bases de datos es MySQL.

En contraste, Django sólo tiene un lugar para almacenar la configuración, y la capa de acceso a bases de datos está abstraída, de manera que es sencillo cambiar de servidor de base de datos (digamos, de MySQL a PostgreSQL).

Lo que no hace DjangoPor 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 engañar a su jefe y hacerle creer que en realidad no se ha quedado en su casa para ver "El precio justo".

Hablando más seriamente, Django todavía no invierte los efectos del calentamiento global.

¿Por qué se desarrolló Django?Las raíces 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 académico durante el tiempo libre de alguien. Fue construido, desde el primer día, para resolverle problemas diarios a un equipo de desarrollo web en la vanguardia de la industria.

Comenzó en el otoño de 2003, en un periódico de pueblo en Lawrence, Kansas.

Por una razón u otra, el periódico Lawrence Journal-World consiguió atraer a un talentoso grupo de diseñadores y desarrolladores web a principios de la década 2000. La división web del periódico, World Online, se convirtió rápidamente en una de las divisiones web de un periódico más innovadoras del mundo. Sus tres sitios principales, LJWorld.com (noticias), Lawrence.com (entretenimiento/música) y KUsports.com (deporte universitario), empezaron a ganar premio tras premio en la industria del periodismo en línea. Sus innovaciones fueron muchas, incluyendo:

Page 6: Introducción a Django.docx

La página de entretenimiento local más exhaustiva del mundo, Lawrence.com, que aúna bases de datos locales de eventos, bandas, restaurantes, bebidas especiales, canciones descargables y noticias en formato tradicional.

Una sección veraniega de LJWorld.com dedicada a los jugadores de las liguillas locales, que los trataba como si fueran los New York Yankees —proporcionando una página para cada equipo y liga, obteniendo datos meteorológicos para mostrar pronósticos 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 teléfonos móviles.

Alertas a teléfonos móviles sobre los partidos de baloncesto y fútbol americano de la Universidad de Kansas, que permitía a los aficionados estar al tanto de las puntuaciones y estadísticas clave durante los partidos, y un segundo sistema que utilizaba algoritmos de inteligencia artificial que permitía a los aficionados enviar mensajes en inglés al sistema para consultar la base de datos ("cuántos puntos llevan los giddens" o "pts giddens").

Una exhaustiva base de datos con todas las estadísticas imaginables sobre el fútbol 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 señaralon a World Online como ejemplo del futuro del periodismo. El New York Times publicó una noticia sobre la empresa en la portada de la sección de negocios; la National Public Radio emitió una serie de dos días 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 características del sitio web de World Online. En una industria lóbrega y anticuada reacia a los cambios, World Online era una rara excepción.

Gran parte del éxito de World Online fue debido a la tecnología que había detrás de sus páginas, y a la filosofía que dice que los programadores informáticos 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, fácil y con los plazos temporales del periodismo.

En otoño 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 habían enamorado recientemente. Tras explorar (y quedar decepcionados con) las librerías de programación web disponibles en Python, empezaron a crear Django.

Dos años más tarde, en verano de 2005, tras haber desarrollado Django hasta un punto en el que ya movía la mayoría de los sitios de World Online, el equipo de World Online, que ya incluía a Jacob Kaplan-Moss, decidió que sería una buena idea liberar el framework. De esa

Page 7: Introducción a Django.docx

manera retribuirían a la comunidad del software libre, obtendrían mejoras gratis de desarrolladores externos, y generarían cierta publicidad para su sistema de gestión de contenidos comercial, Ellington (http://www.ellingtoncms.com/). Django se liberó en julio de 2005 y rápidamente 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 página web del framework (http://www.djangoproject.com/).

¿Quién 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 página 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 mayoría de los artículos.

Faces of the Fallen: http://projects.washingtonpost.com/fallen/

Chicagocrime.org, una base de datos de libre acceso sobre los crímenes 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 compartición de fotos, utiliza Django. La página le permite juntar sus fotografías para crear álbumes de fotos que cuentan historias.

Texasgigs.com, un sitio de música local de Dallas, Texas, fue escrito en Django.

Page 8: Introducción a Django.docx

Grono.net, una red social polaca, comenzó a sustituir su código en Java por Django. Descubrieron que no solo era más rápido de desarrollar (y más divertido), sino que proporcionaba mayor rendimiento que Java y requería menos recursos de hardware.

Traincheck.com fue desarrollada en Django. Esta web le permite enviar mensajes de texto desde su teléfono móvil 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 versión que vamos a utilizar en esta guía es la más reciente (1.4), y varias cosas han cambiado, la información que podrían 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 instrucción 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__.pyo settings.pyo urls.pyo wsgi.py

Para ver que el proyecto está funcionando en la terminal debemos escribir:

python manage.py runserver

Al ejecutar esa instrucción debemos visualizar un resultado como el siguiente:

Page 9: Introducción a Django.docx

python manage.py runserver

Abrimos el navegador web la dirección 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

sólo debemos indicar que puerto usaremos para lanzar el servicio, por ejemplo si se desea usar el puerto 8888 entonces se tendría que digitar:

python manage.py runserver 8888

Usaríamos la dirección http://127.0.0.1:8888/ y tendríamos como resultado lo siguiente:

Page 10: Introducción a Django.docx

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: