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

-
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
-
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

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 datosadmin.py: fichero para registrar los modelos en el panel de administraciónapps.py: fichero para configurar la appmodels.py: fichero para definir los modelos de datos de la apptests.py: fichero para escribir tests unitarios de la appurls.py: fichero para definir las rutas específicas de la apptemplates/: 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
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
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.