3.5 Primer Proyecto Django: "Hola Mundo"¶
1. Patrón MVC¶
Antes de crear nuestro primer proyecto Django, repasemos el patrón MVC (Modelo-Vista-Controlador), que organiza cómo se maneja una petición en una aplicación web.
Patrón MVC
MVC divide la aplicación en tres componentes principales:
- Modelo (Model): Gestiona los datos y la lógica de negocio. Accede a la base de datos y define las reglas de la información.
- Vista (View): Es la interfaz que se muestra al usuario, donde se presentan los datos.
- Controlador (Controller): Gestiona la comunicación entre el modelo y la vista. Recibe las peticiones del usuario, procesa la lógica y devuelve la respuesta adecuada.

Ejemplo de flujo de una petición:¶
Supongamos la URL:
http://midominio.com/articulo/1
/articulo/1. El flujo sería:
- La petición llaga al controlador apropiado. (Se definie en las rutas del servidor).
- El controlador consulta el modelo para obtener los datos del artículo con ID 1.
- El modelo accede a la base de datos
- La base de datos devuelve los datos al modelo.
- El modelo pasa los datos al controlador.
- El controlador envía los datos a la vista.
- La vista formatea los datos (HTML, CSS) y los envía al navegador.
Todos estos pasos ocurren en fracciones de segundo para que el usuario vea la página rápidamente. Nosotros como desarrolladores del backend nos encargamos de definir cada uno de estos componentes, y cada uno de estos pasos funciona correctamente. Los Frameworks como Django nos ayudan a implementar este patrón de forma estructurada y eficiente.
2. Patrón MVT en Django¶
Django utiliza el patrón MVT (Model-View-Template), que es similar a MVC, pero con un pequeño cambio de nombres:
- Model: Igual que en MVC, gestiona los datos.
- View: En Django, el "controlador" se llama vista. Gestiona la lógica de negocio y las peticiones.
- Template: La "vista" en MVC se llama plantilla en Django, y define cómo se presentan los datos al usuario (HTML, CSS).

Resumen MVT
En Django, la vista no se encarga de la presentación visual. Solo decide qué datos mostrar. La plantilla se encarga del formato final que verá el usuario.
3. Estructura básica de un proyecto Django¶
En un proyecto Django existen carpetas y archivos que cumplen roles específicos:
- manage.py → Script principal para gestionar el proyecto (migraciones, servidor, creación de apps).
- settings.py → Configuración global del proyecto (bases de datos, apps instaladas, rutas estáticas, plantillas).
- urls.py → Define las rutas de la aplicación y a qué vista apuntan.
- views.py → Funciones o clases que gestionan las peticiones y devuelven respuestas.
- models.py → Define los modelos que representan la estructura de datos en la base de datos.
- templates/ → Carpeta donde se almacenan las plantillas HTML.
- static/ → Carpeta para archivos estáticos (CSS, JS, imágenes).
4. Partimos del proyecto myproject¶
Contunuamos con el proyecto creado en el módulo anterior. Podemos crear un nuevo proyecto Django dentro de la carpeta del proyecto si no lo hicimos antes:
django-admin startproject myproject .
cd myproject
4.1 Estructura inicial¶
myproject/
│
├── manage.py
├── myproject/
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ ├── asgi.py
│ └── wsgi.py
5. Explicación de archivos clave¶
5.1 manage.py¶
Es tu herramienta principal para interactuar con Django:
python manage.py runserver [puerto]→ Inicia el servidor de desarrollo.python manage.py migrate→ Aplica migraciones en la base de datos.python manage.py createsuperuser→ Crea un usuario administrador.
5.2 asgi.py y wsgi.py¶
- WSGI: Interface para desplegar Django en servidores web tradicionales (Apache, Nginx + Gunicorn).
- ASGI: Interface moderna que permite manejar conexiones asíncronas (WebSockets, canales, chat, etc.).
5.3 urls.py¶
Define las rutas de la aplicación. Cada URL se asocia a una vista.
from django.urls import path
from . import views
urlpatterns = [
path('saludo/', views.saludo, name='saludo'),
]
Por convención, las rutas deben terminar en
/y cada ruta puede tener un nombre para referenciarla en templates o redirecciones.
5.4 settings.py¶
Podemos echar un vistazo al fichero de configuración settings.py. Y buscar las siguientes secciones clave. De momento no modificamos nada pero nos podemos ir familiarizando con ellas:
- INSTALLED_APPS → Lista de apps activas en el proyecto.
- DATABASES → Configuración de base de datos (por defecto SQLite).
- MIDDLEWARE → Conjunto de capas que procesan la petición/respuesta (seguridad, sesión, csrf).
- TEMPLATES → Ubicación de plantillas.
- STATICFILES_DIRS → Ubicación de archivos estáticos.
- LANGUAGE_CODE / TIME_ZONE → Configuración de idioma y zona horaria.
middleware
Middlewares son como filtros que procesan la petición antes de llegar a la vista y la respuesta antes de enviarla al navegador.
6. Django y sus Apps¶
Django es modular: un proyecto está compuesto por apps, cada una es independiente:
-
Ejemplo:
-
usuarios→ Gestión de usuarios y autenticación. blog→ Gestión de artículos y comentarios.tienda→ Gestión de productos y pedidos.
A diferencia de frameworks minimalistas como Flask, en Django las apps son esenciales y forman la base del proyecto.
7. Primera aplicación "Hola Mundo"¶
7.1 Migraciones iniciales¶
python manage.py migrate
- Aplica las migraciones iniciales y crea la base de datos.
- Para inspeccionarla, puedes instalar SQLTools en VSCode y ver el contenido de SQLite.
7.2 Ejecutar servidor de desarrollo¶
python manage.py runserver
- Accede a
http://127.0.0.1:8000/en tu navegador.
7.3 Crear views.py¶
En la carpeta del proyecto myproject/, crea views.py:
from django.http import HttpResponse
def saludo(request):
return HttpResponse("Hola Mundo")
request→ Contiene toda la información de la petición HTTP.HttpResponse→ Devuelve la respuesta al navegador.
7.4 Modificar urls.py¶
from django.urls import path
from . import views
urlpatterns = [
path('saludo/', views.saludo, name='saludo'),
]
7.5 Probar el servidor¶
- Ejecuta
python manage.py runserver. - Accede a
http://127.0.0.1:8000/saludo/. - Deberías ver Hola Mundo.
Warning
Inicialmente la ruta
/puede dar error si no se ha creado ninguna vista para ella. Solo hemos creado/saludo/.
¶
Ejercicio práctico¶
Crear una nueva ruta /despedida/ que devuelva Adiós Mundo
Solución para views.py y urls.py
# views.py
from django.http import HttpResponse
def despedida(request):
return HttpResponse("Adiós Mundo")
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.saludo, name='saludo'),
path('despedida/', views.despedida, name='despedida'),
]