Для использования сеансов в Django Channels необходимо выполнить несколько шагов.
1. Установите зависимости:
pip install channels_redis
2. Настройте каналы в файле settings.py
:
INSTALLED_APPS = [ ... 'channels', ] CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': { "hosts": [('localhost', 6379)], }, }, }
3. Создайте файл consumers.py
, где определите потребителя (consumer). В потребителе вы сможете получить доступ к сеансу и использовать его. Например:
from channels.generic.websocket import AsyncJsonWebsocketConsumer class MyConsumer(AsyncJsonWebsocketConsumer): async def connect(self): # Получить сеанс self.session = await self.scope["session"].load() # Продолжить подключение await self.accept() async def receive_json(self, content, **kwargs): # Использовать сеанс self.session["key"] = "value" await self.session.save() async def disconnect(self, close_code): # Закрыть сеанс await self.session.save()
4. Включите пути к вашим потребителям (consumers) в файле routing.py
:
from django.urls import re_path from .consumers import MyConsumer websocket_urlpatterns = [ re_path(r'ws/my-websocket/$', MyConsumer.as_asgi()), ]
5. Откройте WebSocket-подключение на клиентской стороне:
var socket = new WebSocket('ws://localhost:8000/ws/my-websocket/'); socket.onmessage = function(e) { var data = JSON.parse(e.data); console.log(data); }; socket.onopen = function() { socket.send(JSON.stringify({ 'message': 'Hello, server!' })); }; socket.onclose = function(e) { console.log('Socket closed:', e); };
6. Запустите сервер Django Channels и сервер Redis:
python manage.py runserver
Теперь вы можете использовать сеансы в Django Channels, сохранять в них данные и