async def test_send_message(url, client): user = baker.make(models.USER_MODEL) client.force_login(user) request = client.get(url).wsgi_request session = request.session communicator = WebsocketCommunicator(ChatConsumer.as_asgi(), url) communicator.scope['session'] = session chat = baker.make(models.CHAT_MODEL) # Setup data = { 'type': 'setup_channel_layer', 'chat': chat.pk, 'session_key': session.session_key, } await communicator.send_json_to(data) word = fake.word() data = { 'type': 'send_message', 'chat': chat.pk, 'message': word, } await communicator.send_json_to(data) response = await communicator.receive_json_from() message = response['message'] assert word == message['message'] assert chat.pk == message['chat'] assert ChatMessage.objects.get(pk=message['id']) # Disconnect await communicator.disconnect()
async def test_setup_channel_layer(url): communicator = WebsocketCommunicator(ChatConsumer.as_asgi(), url) chat = baker.make(models.CHAT_MODEL) data = { 'type': 'setup_channel_layer', 'chat': chat.pk, } await communicator.send_json_to(data) # Disconnect communicator await communicator.disconnect()
async def test_send_message_without_setup(url, client): user = baker.make(models.USER_MODEL) client.force_login(user) request = client.get(url).wsgi_request communicator = WebsocketCommunicator(ChatConsumer.as_asgi(), url) communicator.scope['session'] = request.session chat = baker.make(models.CHAT_MODEL) data = { 'type': 'send_message', 'chat': chat.pk, 'message': fake.word(), } await communicator.send_json_to(data) response = await communicator.receive_json_from() assert 'error' in response # Disconnect await communicator.disconnect()
from channels.sessions import SessionMiddlewareStack from django.conf.urls import url, re_path from channels.routing import ProtocolTypeRouter, URLRouter, ChannelNameRouter from channels.auth import AuthMiddlewareStack from channels.security.websocket import AllowedHostsOriginValidator, OriginValidator from chat.consumers import ChatConsumer, TaskConsumer from render.consumers import RenderConsumer, ServerConsumer from sketchbook.consumers import SketchbookConsumer application = ProtocolTypeRouter({ # Websocket chat handler 'websocket': AllowedHostsOriginValidator( AuthMiddlewareStack( URLRouter( [ re_path(r"^messages/(?P<username>[\w.@+-]+)$", ChatConsumer(), name='chat'), re_path(r"^api/render/$", RenderConsumer(), name='render'), re_path(r"^server_info$", ServerConsumer(), name='server'), re_path(r"^ws/sketchbook/$", SketchbookConsumer().as_asgi(), name='sketchbook'), ] ) ), ), 'channel': ChannelNameRouter({ 'task': TaskConsumer }) })
# chat/routing.py from django.urls import re_path from chat.consumers import ChatConsumer websocket_urlpatterns = [ re_path(r'ws/chat/(?P<room_name>\w+)/$', ChatConsumer.as_asgi()), ]
from channels.auth import AuthMiddlewareStack from channels.routing import ProtocolTypeRouter, URLRouter from django.urls import path from chat.consumers import ChatConsumer application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter([ path('ws/chat/<slug:chatname>/', ChatConsumer.as_asgi()), ]) ), })
from django.urls import path from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack from chat.consumers import ChatConsumer application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter({ path('ws/chat/', ChatConsumer.as_asgi(), name='chat'), }), ), })
from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack from django.urls import path, include, re_path from django.conf.urls import url from chat.consumers import ChatConsumer ws_urlpatterns = [ re_path(r'^ws/(?P<room_id>\w+)/$', ChatConsumer.as_asgi()), ] application = ProtocolTypeRouter({ 'websocket': AuthMiddlewareStack( URLRouter( ws_urlpatterns ) ) })
from django.urls import path from chat.consumers import ChatConsumer websocket_urlpatterns = [ # path(r'^ws/chat/(?P<room_name>[^/]+)/(?P<auth>[^/]+)/$', ChatConsumer) path('ws/chat/<int:sender_id>/<int:receiver_id>/', ChatConsumer.as_asgi()) ]
from django.urls import path from . import consumers from chat.consumers import ChatConsumer websocket_urlpatterns = [ path('notifications/', consumers.NotificationConsumer().as_asgi()), path('ws/chat/<str:room_name>/', ChatConsumer().as_asgi()), ]
#! /usr/bin/env python # -*- coding: utf-8 -*- # from channels.routing import route from chat.consumers import ChatConsumer #导入处理函数 from accounts.consumers import UserConsumer channel_routing = [ ChatConsumer.as_route(path=r"/chat/", attrs={ 'group': 'chat', 'group_prefix': 'pre' }), UserConsumer.as_route(path=r"/user/", attrs={ 'group': 'users', 'group_prefix': 'pre' }), ]