Swiftorial Logo
Home
Swift Lessons
Matchups
CodeSnaps
Tutorials
Career
Resources

WebSockets in Django

Introduction to WebSockets

WebSockets provide a way to open a persistent connection between the client and server and allow for real-time, two-way interaction. Unlike the traditional HTTP request-response model, WebSockets enable data to be sent and received continuously, which is ideal for applications that require real-time updates, such as chat applications, live sports updates, and online games.

Setting Up Django Channels

Django Channels extends Django to handle WebSockets. To get started with Django Channels, you need to install it along with its dependencies:

pip install channels

Next, add channels to your INSTALLED_APPS in your Django settings:

INSTALLED_APPS = [
    ...
    'channels',
    ...
]
                

Then, define an ASGI application in your settings:

ASGI_APPLICATION = 'your_project_name.asgi.application'
                

Creating the ASGI Application

Create an asgi.py file in your project directory. This file will set up your ASGI application:

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from your_app_name import routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project_name.settings')

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": AuthMiddlewareStack(
        URLRouter(
            routing.websocket_urlpatterns
        )
    ),
})
                

Creating a Routing Configuration

In your app directory, create a file called routing.py where you will define your WebSocket URL routes:

from django.urls import path
from your_app_name import consumers

websocket_urlpatterns = [
    path('ws/some_path/', consumers.YourConsumer.as_asgi()),
]
                

Creating a WebSocket Consumer

Consumers handle the WebSocket connections. Create a file called consumers.py in your app directory:

import json
from channels.generic.websocket import AsyncWebsocketConsumer

class YourConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()

    async def disconnect(self, close_code):
        pass

    async def receive(self, text_data):
        data = json.loads(text_data)
        message = data['message']

        await self.send(text_data=json.dumps({
            'message': message
        }))
                

Frontend Integration

To interact with the WebSocket from the frontend, you can use JavaScript. Below is an example of how to connect to the WebSocket and send/receive messages:


                

Running the Server

To run the server, use the following command:

python manage.py runserver

Now you should be able to open your web application and see the WebSocket in action.