Guzmán D. Darío Senior Python Developer Español Hire me
Taller autoguiado

Tiempo real con Django Channels

Paso 01 de 02
Paso 1 de 2

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
python3 --version
python3 --version
py --version

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
mkdir pizarra && cd pizarra python3 -m venv env source env/bin/activate pip install django channels channels-redis daphne
mkdir pizarra && cd pizarra python3 -m venv env source env/bin/activate pip install django channels channels-redis daphne
mkdir pizarra cd pizarra py -m venv env env\Scripts\activate pip install django channels channels-redis daphne

Ahora arranca el proyecto y la app de la pizarra.

Terminal bash
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.

Terminal bash
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.

pizarra/settings.py python
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.