Stack: Python 3.12+ · Django 5.x · Django REST Framework · Linux Estado: Dominada (marcada al completar la puesta a punto)
Objetivos
Al terminar esta lección sabrás:
- Instalar y aislar las herramientas del stack en Linux.
- Crear un proyecto Django + DRF con buena estructura desde el minuto uno.
- Levantar tu primer endpoint y comprobarlo con
curl. - Inicializar Git con un
.gitignoreadecuado a Python. - Conocer la estructura de trabajo del curso: teoría → ejercicios → corrección → proyecto.
1. Instalación del stack (Linux)
# Comprueba tu versión de Python (necesitas 3.12+)
python3 --version
# Crea el directorio del proyecto y un entorno virtual aislado
mkdir -p ~/dev/ticketflow && cd ~/dev/ticketflow
python3 -m venv .venv
source .venv/bin/activate # tu prompt mostrará (.venv)
# Instala Django y DRF
pip install --upgrade pip
pip install django djangorestframework
# Congela las dependencias (siempre, desde el principio)
pip freeze > requirements.txtPor qué
venv: cada proyecto tiene sus propias dependencias y versiones. Sin aislamiento, dos proyectos pueden pelearse por la versión de una librería. Esto es la semilla de la Lección 27 (configuración 12-factor).
Herramientas que usaremos más adelante (instálalas ahora, tómalas con calma):
sudo apt install postgresql redis-server # Módulo 2 y 6 (BD y colas)
docker --version # Módulo 92. Crear el proyecto TicketFlow
django-admin startproject config . # ¡el punto importa!
python manage.py startapp eventsEstructura resultante (y la que mantendremos):
ticketflow/
├── config/ ← configuración (settings, urls, wsgi) — el "proyecto"
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── events/ ← primera app: eventos y aforo — el dominio
│ ├── models.py
│ ├── views.py
│ └── ...
├── manage.py
└── requirements.txtConvención de nivel empresarial: llamamos
configal proyecto porque su único papel es configurar y arrancar; la lógica vive en apps. Así evitamos el clásicoticketflow/ticketflow/confuso.
Registra DRF en config/settings.py:
INSTALLED_APPS = [
# ...apps de Django por defecto...
"rest_framework",
"events",
]3. Tu primer endpoint
Django puro trabaja con HttpRequest/HttpResponse; DRF añade Request/Response con negociación de contenido, serializers y auth. Para una API, viviremos en DRF.
events/views.py:
from rest_framework.decorators import api_view
from rest_framework.response import Response
@api_view(["GET"])
def health(request):
"""Endpoint de salud: el primero de todo backend serio."""
return Response({"status": "ok", "service": "ticketflow"})config/urls.py:
from django.contrib import admin
from django.urls import path
from events import views
urlpatterns = [
path("admin/", admin.site.urls),
path("api/health/", views.health),
]Levanta el servidor y comprueba:
python manage.py migrate # crea la BD inicial (SQLite por ahora)
python manage.py runserver # http://127.0.0.1:8000curl -i http://127.0.0.1:8000/api/health/Salida esperada (¡fíjate en las cabeceras, son la Lección 01!):
HTTP/1.1 200 OK
Date: ...
Content-Type: application/json
...
{"status": "ok", "service": "ticketflow"}4. Git desde el minuto uno
git initCrea .gitignore con este mínimo Python:
__pycache__/
*.pyc
.venv/
db.sqlite3
.envgit add .
git commit -m "chore: proyecto TicketFlow inicial (Django + DRF)"Nunca commitees
db.sqlite3ni.env. Las claves van en variables de entorno (Lección 27); el esquema vive en migraciones, no en el fichero de BD.
Cierre de la lección
- [ ] Stack instalado y venv funcionando
- [ ] Endpoint
/api/health/responde 200 con JSON - [ ] Repositorio Git inicializado con
.gitignore - [ ] Sabes explicar qué hace
startappfrente astartproject
Ya estás listo para la Lección 01 — HTTP a fondo.