martes, 28 de julio de 2015

Que es Django


 
¿Qué es Django?

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 "Content­Type: 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('ultimos­libros.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.

No hay comentarios.:

Publicar un comentario