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()

Sources