Vue d'ensemble
Django Channels 4.0, publié le 10 août 2022, requiert Django 4.0+ et améliore les outils de test pour les WebSocket et les consumers asynchrones.
Fonctionnalités principales
Compatibilité Django 4.0+
Channels 4.0 est aligné avec Django 4.0+ et tire parti des améliorations async du framework, notamment les vues asynchrones natives.
python
from channels.generic.websocket import AsyncWebsocketConsumer
import json
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
self.room = self.scope['url_route']['kwargs']['room']
await self.channel_layer.group_add(self.room, self.channel_name)
await self.accept()
async def receive(self, text_data):
data = json.loads(text_data)
await self.channel_layer.group_send(
self.room, {'type': 'chat.message', 'message': data['message']}
)
Tests améliorés
Les outils de test sont enrichis avec WebsocketCommunicator amélioré pour tester les consumers de manière plus fiable.
python
from channels.testing import WebsocketCommunicator
import pytest
@pytest.mark.asyncio
async def test_chat_consumer():
communicator = WebsocketCommunicator(
ChatConsumer.as_asgi(), '/ws/chat/test/'
)
connected, _ = await communicator.connect()
assert connected
await communicator.disconnect()
