Instalación
Vamos a dejar todo listo: un proyecto Django funcionando, las dependencias instaladas y Redis corriendo. Si ya tienes un proyecto Django con virtualenv activo, puedes saltarte directo a la parte de Channels.
1. Crear el entorno
Primero verifica que tienes Python 3.10 o más nuevo.
Verifica la versión de Python instalada
- Linux
- macOS
- Windows
2. Crear el proyecto
Crea una carpeta nueva, activa un entorno virtual e instala las dependencias.
Crear el proyecto, virtualenv e instalar dependencias
- Linux
- macOS
- Windows
Ahora arranca el proyecto y la app de la pizarra.
django-admin startproject pizarra .
python manage.py startapp board
3. Redis
Necesitamos Redis para que Channels pueda mandar mensajes entre clientes. La forma más rápida es con Docker.
docker run -d --name redis -p 6379:6379 redis:7-alpine
Ojo
En producción nunca expongas Redis al internet público sin autenticación. Para desarrollo local en tu máquina, está bien.
4. Configurar Channels
Abre el archivo de settings y modifica INSTALLED_APPS agregando daphne al inicio, channels y tu app board.
INSTALLED_APPS = [
"daphne", # va PRIMERO
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"channels",
"board",
]
ASGI_APPLICATION = "pizarra.asgi.application"
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {"hosts": [("127.0.0.1", 6379)]},
},
}
Algo va a fallar... · Olvido común de orden
Si dejas daphne al final de INSTALLED_APPS (en lugar de al inicio) y arrancas el servidor con python manage.py runserver, Django va a usar el servidor WSGI normal y los WebSockets no funcionarán. Vas a ver Starting development server en lugar de Starting ASGI/Daphne.
Cómo resolverlo
daphne tiene que ir antes de django.contrib.staticfiles en la lista. Es el primer item. Mueve daphne al inicio y reinicia el servidor.
Checkpoint
Si arrancas el servidor con python manage.py runserver y ves el mensaje Starting ASGI/Daphne version X.X.X en lugar del WSGI normal, todo está bien.