Saltar a contenido

Modularización en Django

1. Introducción

En un proyecto web real no metemos todo en una sola carpeta. En Django, un proyecto puede componerse de múltiples aplicaciones (apps), cada una encargada de una funcionalidad concreta. Esto organiza mejor el código, facilita el mantenimiento y permite reutilizar funcionalidades entre proyectos.

Aplicaciones en Django

Las aplicaciones en Django permiten encapsular distintas funcionalidades, como la autenticación de usuarios, la gestión de posts o comentarios, de forma modular, lo que facilita la reutilización y la mantenibilidad.

Imaginemos que tenemos estos dos proyectos web:

Modulariazación en Django

Modularización en Django

  1. Proyecto A: Blog de noticias con:

    • Autenticación de usuarios (login, logout, registro) + login social (Google, Facebook, X/Twitter)
    • Gestión de posts
    • Comentarios en los artículos
    • RSS (compartir/feeds)
    • Gestión de anuncios
  2. Proyecto B: Periódico digital con:

    • Suscripciones
    • Pagos
    • Feed de noticias
    • Y nos piden añadir: login social + comentarios en los artículos

Si ahora nos piden implementar en el Periódico digital las funcionalidades de login social y comentarios en los artículos, ¿qué hacemos?:

Reutilización de Apps

Gracias a la modularización, podemos reutilizar las apps de autenticación y comentarios del Blog de noticias en el Periódico digital sin reescribir nada: bastará con instalar/importar esas apps en el nuevo proyecto y configurarlas.

Modulariazación en Django

Modularización en Django

Recordemos que Django llama a estos módulos apps. Cada app en Django es una carpeta con una estructura específica que incluye archivos como models.py, views.py, urls.py, admin.py, entre otros.

Aplicación web en Django

Una aplicación web en Django es un conjunto de apps que trabajan juntas para ofrecer la funcionalidad completa del sitio web.

En los próximos apartados vamos a ver más detenidamente la estructura de una app en Django y cómo crear un proyecto modular paso a paso.


2. ¿Qué es una app en Django?

Ahora que ya tenemos claro conceptualmente qué es una app en Django, veamos su estructura y propósito.

Una app en Django es una carpeta con una estructura típica:

mi_app/
├─ admin.py        # Registro del modelo en el admin
├─ apps.py         # Configuración de la app
├─ migrations/     # Migraciones de BD
├─ models.py       # Modelos (capa de Datos)
├─ tests.py        # Tests unitarios
├─ urls.py         # Enrutado propio de la app
├─ views.py        # Vistas (controlador en MTV)
└─ templates/      # Plantillas HTML de la app

Cada app debe tener un propósito claro: p.ej. usuarios (auth), posts (artículos), comentarios, anuncios, pagos, suscripciones, feeds.

Es importante mantener las funcionalidades separadas para facilitar el mantenimiento y la escalabilidad del proyecto.

La estructura de una app de django es muy parecida a la estructura que ya vimos de un proyecto. Pero si nos fijamos bien veremos que ha desaparecido algún fichero y aparecido otros nuevos.

Desaparecen: - settings.py - wsgi.py - asgi.py

Estos ficheros tienen que ver con la configuración y despliegue del proyecto, no de una app concreta, por tanto solo tendremos una copia de ellos en la carpeta del proyecto.

Aparecen:

  • migrations/: carpeta donde se guardan las migraciones de la base de datos
  • admin.py: fichero para registrar los modelos en el panel de administración
  • apps.py: fichero para configurar la app
  • models.py: fichero para definir los modelos de datos de la app
  • tests.py: fichero para escribir tests unitarios de la app
  • urls.py: fichero para definir las rutas específicas de la app
  • templates/: carpeta para guardar las plantillas HTML específicas de la app

Algunos de estos ficheros ya los concocemos, y su utilización va a ser igual o muy parecida a la que ya vimos en el proyecto. Otros los veremos en detalle en los próximos temas.

models.py: Este es el fichero donde podremos definir los modelos de datos de nuestra app. Recordar que estamos utilizando el modelo MTV (Model-Template-View) de Django. Hasta ahora hemos utilizado las vistas y las plantillas, pero no habíamos utilizado los modelos. En el próximo tema veremos en detalle como definir los modelos de datos en Django. De esta manera cerraremos el ciclo de vida de las peticiones en Django.


3. Creación paso a paso de un proyecto modular

3.1 Crear el proyecto

Repasamos previamente como crear el entorno virtual e instalar Django:

python -m venv venv
source venv/bin/activate  # En Linux/Mac
venv\Scripts\activate  # En Windows
pip install django

Una vez esta todo listo, creamos el proyecto:

django-admin startproject modular .
cd modular

Estructura inicial:

modular/
├─ manage.py
└─ modular/
   ├─ __init__.py
   ├─ settings.py
   ├─ urls.py
   └─ wsgi.py

3.2 Crear apps según funcionalidades

Ahora, vamos a crear nuestra primera app, 'comentarios', para gestionar los comentarios. No busquemos demasiado signidicado de momento a los módulos, ahora de momento se trata de aprender acrearlo, configurarlos y utilizarlos desde el proyecto.

Creamos la app:

python manage.py startapp comentarios

Esto nos habrá creado la estructura vista anteriormente dentro de la carpeta comentarios/.

3.3 Registrar apps en settings.py

Para que nuestra app sea reconocida por Django, debemos añadirla a la lista INSTALLED_APPS en settings.py. De esta manera comunicamos al proyecto que vamos a utilizar esta app. No todas las apps que creemos tienen por qué ser utilizadas en el proyecto, solo las que añadamos a esta lista.

INSTALLED_APPS = [
    'comentarios',
]

4. Checkear que la estructura es correcta

Django proporciona un comando muy útil para verificar que la configuración del proyecto es correcta:

python manage.py check
Si todo está bien, veremos un mensaje indicando que no hay problemas. Si hay algún error, Django nos lo indicará para que podamos corregirlo.

Con esto ya tenemos nuestro proyecto modular básico con una app creada y registrada. En los próximos temas veremos cómo definir modelos, vistas y plantillas dentro de esta app para gestionar los comentarios.

7. Ejercicio práctico

Ejercicio 1

Crea una nueva app usuarios, registra la nueva app y verifica que la configuración es correcta.

Solución

python manage.py startapp usuarios
Añádela a INSTALLED_APPS en settings.py y ejecuta el comando check.

python manage.py check

8. Resumen

En este tema, hemos aprendido cómo utilizar las apps en Django para modularizar un proyecto. Vimos cómo crear diferentes aplicaciones, registrarlas en settings.py y conectarlas a las vistas y modelos correspondientes. Este enfoque modular permite una mayor escalabilidad y mantenibilidad en proyectos grandes. Además, la reutilización de apps entre proyectos facilita el desarrollo y la adaptación a nuevos requerimientos sin tener que reescribir código.