El libro de Django 1.0

1.2. El patrón de diseño MVC

Comencemos con un rápido ejemplo 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 (las tablas de la base de datos)

from django.db import models

class Book(models.Model):
    name = models.CharField(maxlength=50)
    pub_date = models.DateField()
# views.py (la parte lógica)

from django.shortcuts import render_to_response
from models import Book

def latest_books(request):
    book_list = Book.objects.order_by('-pub_date')[:10]
    return render_to_response('latest_books.html', {'book_list': book_list})
# urls.py (la configuración URL)

from django.conf.urls.defaults import *
import views

urlpatterns = patterns('',
    (r'latest/$', views.latest_books),
)
{# latest_books.html (la plantilla) #}

<html>
  <head><title>Books</title></head>
  <body>
    <h1>Books</h1>

    <ul>
    {% for book in book_list %}
      <li>{{ book.name }}</li>
    {% endfor %}
    </ul>
  </body>
</html>

Todavía no es necesario preocuparse por los detalles de cómo funciona esto — tan sólo queremos que te acostumbres al diseño general —. Lo que hay que notar principalmente en este caso 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 código Python sencillo en lugar de escribir declaraciones SQL repetitivas.
  • El archivo views.py contiene la lógica de la página, en la función latest_books(). A esta función se la denomina vista.
  • El archivo urls.py especifica qué vista es llamada según el patrón URL. En este caso, la URL /latest/ será manejada por la función latest_books().
  • El archivo latest_books.html es una plantilla HTML que describe el diseño de la página.

Tomadas en su conjunto, estas piezas se aproximan al patrón de diseño Modelo-Vista-Controlador (MVC). Dicho de manera más fácil, MVC 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).

Una ventaja clave de este enfoque es que los componentes tienen un acoplamiento débil (en inglés, loosely coupled) entre sí. Eso significa que cada pieza de la aplicación Web que funciona sobre Django tiene un único propósito clave, que puede ser modificado independientemente sin afectar las otras piezas.

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.

En este libro, cada componente tiene su propio capítulo. Por ejemplo, el Capítulo 3 trata sobre las vistas, el Capítulo 4 sobre las plantillas, y el Capítulo 5 sobre los modelos. El Capítulo 5 profundiza también en la filosofía MVC de Django.