Plan de Aprendizaje Completo: Django
Objetivo: Construir aplicaciones web y APIs con Django cuando el proyecto pide baterías incluidas: admin, ORM, autenticación y un marco claro de proyecto.
Metodología: Cada fase cierra con un entregable. FastAPI ya cubre APIs livianas; aquí el foco es el framework completo y Django REST Framework.
Tus apuntes van en Mis notas.
Índice
- Fase 1: Proyecto, apps y el ciclo de una petición
- Fase 2: Modelos, ORM y migraciones
- Fase 3: Vistas, URLs, templates y admin
- Fase 4: Django REST Framework
- Fase 5: Auth, permisos y configuración
- Fase 6: Pruebas y despliegue
- Proyectos integradores
Fase 1: Proyecto, apps y el ciclo de una petición
Meta: Entender cómo Django parte un proyecto en apps y qué ocurre desde la URL hasta la respuesta.
- Entorno virtual,
django,django-admin startprojectypython manage.py runserver - Estructura:
manage.py,settings.py,urls.py,wsgi.py/asgi.py - Crear una app (
startapp) y registrarla enINSTALLED_APPS - Ciclo request → URL resolver → vista → respuesta
- Settings por entorno: no dejar
DEBUG=TrueniSECRET_KEYen el repo - 🧪 Práctica: Proyecto vacío con una app
coreque responda un JSON de salud en/health.
Fase 2: Modelos, ORM y migraciones
Meta: Modelar datos relacionales y evolucionar el esquema sin perder filas.
- Campos:
CharField,IntegerField,DecimalField,DateTimeField,ForeignKey,ManyToManyField -
nullvsblank,related_name,on_delete - Consultas:
filter,exclude,get,order_by,select_related,prefetch_related - Agregaciones:
annotate,aggregate,Count,Sum - Migraciones:
makemigrations,migrate, revisar el archivo antes de aplicar - 🧪 Práctica: Modelos Usuario de negocio, Proyecto y Tarea (1:N y N:M) con tres migraciones seguidas.
Fase 3: Vistas, URLs, templates y admin
Meta: Publicar pantallas simples y usar el admin como herramienta interna, no como el producto final.
- Function views y class-based views (
ListView,DetailView,CreateView) -
path,include, nombres de ruta yreverse - Templates: herencia con
{% extends %},{% block %}, contexto - Formularios
ModelFormy validación - Admin:
list_display,search_fields,list_filter, inlines - 🧪 Práctica: CRUD HTML de tareas más un admin usable para cargar datos de prueba.
Fase 4: Django REST Framework
Meta: Exponer el mismo dominio como API JSON, con validación y paginación.
-
APIViewvsViewSet+ routers - Serializers:
ModelSerializer, campos de solo lectura,create/updatecustom - Paginación, filtros (
django-filter) y búsqueda - Códigos de estado y
ValidationError - Versionado simple:
/api/v1/ - 🧪 Práctica: API REST del CRUD de la fase 3, con paginación y un filtro por estado.
Fase 5: Auth, permisos y configuración
Meta: Separar quién entra y qué puede hacer.
- Usuario de Django vs perfil de dominio (
OneToOne) - Session auth para el admin y token o JWT para la API
- Permisos:
IsAuthenticated, permisos por objeto, grupos - CORS cuando un frontend (React o Dash) vive en otro origen
- Variables de entorno con
django-environo equivalente - 🧪 Práctica: Registro, login y endpoints donde cada usuario solo ve sus tareas.
Fase 6: Pruebas y despliegue
Meta: Que un cambio de modelo no rompa la API en silencio.
-
TestCaseyAPIClient: camino feliz y 401/403/400 - Base de datos de prueba y fixtures mínimas
-
collectstatic,ALLOWED_HOSTS, base de datos PostgreSQL - Gunicorn + un reverse proxy, o un PaaS
- 🧪 Práctica: Suite que cubra el CRUD y un
Dockerfileque levante la app.
Proyectos integradores
- Tablero interno de solicitudes — modelos, admin para el equipo y API para un dashboard.
- Catálogo de datasets — dueño, fuente, frescura y un endpoint de búsqueda.
Recursos
| Recurso | Uso |
|---|---|
| Tutorial oficial de Django | Proyecto, modelos, admin |
| Django REST framework | APIs |
| Consultas ORM | select_related y agregaciones |
Criterios de avance
| Fase | La dominas cuando... |
|---|---|
| 1 | Explicas el camino de una URL hasta la vista sin abrir el código |
| 2 | Agregas un campo con datos existentes y la migración aplica limpia |
| 3 | El admin sirve para operar y la pantalla no duplica esa lógica a ciegas |
| 4 | Un ViewSet entrega lista paginada y detalle con validación |
| 5 | Un usuario no puede leer ni editar lo de otro |
| 6 | Los tests fallan si quitas un permiso y el contenedor arranca solo |