Ошибка каналов Django : TypeError: __call__() отсутствует 1 необходимый позиционный аргумент: 'send'
Я работаю над каналами Django и приложением Async и я абсолютно новичок в этом. Я начал смотреть учебники по этому вопросу. Когда я запустил сервер django, он работает нормально, но когда я загружаю страницу или пытаюсь соединиться с клиентом websocket king для тестирования сервера, он показывает ошибку ->
WebSocket HANDSHAKING /ws/game/roomname [127.0.0.1:51190]
Exception inside application: __call__() missing 1 required positional argument: 'send'
Traceback (most recent call last):
File "C:\Users\user\anaconda3\lib\site-packages\channels\staticfiles.py", line 44, in __call__
return await self.application(scope, receive, send)
File "C:\Users\user\anaconda3\lib\site-packages\channels\routing.py", line 71, in __call__
return await application(scope, receive, send)
File "C:\Users\user\anaconda3\lib\site-packages\channels\sessions.py", line 47, in __call__
return await self.inner(dict(scope, cookies=cookies), receive, send)
File "C:\Users\user\anaconda3\lib\site-packages\channels\sessions.py", line 263, in __call__
return await self.inner(wrapper.scope, receive, wrapper.send)
File "C:\Users\user\anaconda3\lib\site-packages\channels\auth.py", line 185, in __call__
return await super().__call__(scope, receive, send)
File "C:\Users\user\anaconda3\lib\site-packages\channels\middleware.py", line 26, in __call__
return await self.inner(scope, receive, send)
File "C:\Users\user\anaconda3\lib\site-packages\channels\routing.py", line 150, in __call__
return await application(
File "C:\Users\user\anaconda3\lib\site-packages\asgiref\compatibility.py", line 34, in new_application
return await instance(receive, send)
TypeError: __call__() missing 1 required positional argument: 'send'
WebSocket DISCONNECT /ws/game/roomname [127.0.0.1:51190]
Я новичок в этом и не могу решить проблему. Пожалуйста, помогите .
Мой проект asgi.py
import os
from channels.routing import ProtocolTypeRouter , URLRouter
from channels.auth import AuthMiddlewareStack
from home.consumers import GameRoom
from django.urls import path
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tictac.settings')
application = get_asgi_application()
ws_pattern = [
path("ws/game/<room_code>" , GameRoom)
]
application = ProtocolTypeRouter({
"websocket" : AuthMiddlewareStack(URLRouter(
ws_pattern
))
})
Пожалуйста, если возможно, дайте подробное объяснение этому, чтобы я понял, в чем заключается ошибка .
Просто измените свой
ws_pattern = [
path("ws/game/<room_code>" , GameRoom)
]
With
ws_pattern = [
path("ws/game/<room_code>" , GameRoom.as_asgi())
]