📡 You're offline — showing cached content
New version available!
Quick Access
Tutorials Django Framework Django Channels WebSockets

Django Channels WebSockets

5 min read
Add real-time WebSocket chat with Django Channels and Redis channel layer.

WebSockets with Django Channels

pip install channels channels-redis

# settings.py
INSTALLED_APPS   += ["channels"]
ASGI_APPLICATION  = "mysite.asgi.application"
CHANNEL_LAYERS = {"default": {
    "BACKEND": "channels_redis.core.RedisChannelLayer",
    "CONFIG":  {"hosts": [("127.0.0.1", 6379)]}
}}

from channels.generic.websocket import AsyncWebsocketConsumer
import json

class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        room       = self.scope["url_route"]["kwargs"]["room"]
        self.group = "chat_" + room
        await self.channel_layer.group_add(self.group, self.channel_name)
        await self.accept()

    async def receive(self, text_data):
        data = json.loads(text_data)
        await self.channel_layer.group_send(
            self.group,
            {"type": "chat.message", "message": data["message"]}
        )

    async def chat_message(self, event):
        await self.send(text_data=json.dumps({"message": event["message"]}))