await self.disconnect(message["code"]) TypeError: ChatConsumer.disconnect() принимает 1 позиционный аргумент, но дано 2

потребители.py

      import json
from channels.generic.websocket import AsyncWebsocketConsumer
# from asgiref.sync import sync_to_async

class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        self.room_name = self.scope['url_route']['kwargs']['room_name']
        self.room_group_name ='chat_%s' % self.room_name

        await self.channel_layer.group_add(
            self.room_group_name,
            self.channel_name,
        )

        await self.accept()

    async def disconnect(self):
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name,
        )

маршрутизация.py

      from django.urls import path
from room import consumers

websocket_urlpatterns=[
    path('ws/<str:room_name>/',consumers.ChatConsumer.as_asgi()),
]

asgi.py

      import os

from django.core.asgi import get_asgi_application

from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter

import room.routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangochat.settings')

application = ProtocolTypeRouter({
    "http":get_asgi_application(),
    "websocket":AuthMiddlewareStack(
        URLRouter(
            room.routing.websocket_urlpatterns
        )
    )
})

ошибка:

      Exception inside application: ChatConsumer.disconnect() takes 1 positional argument but 2 were given
Traceback (most recent call last):
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\staticfiles.py", line 44, in __call__
    return await self.application(scope, receive, send)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\routing.py", line 71, in __call__
    return await application(scope, receive, send)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\sessions.py", line 47, in __call__
    return await self.inner(dict(scope, cookies=cookies), receive, send)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\sessions.py", line 263, in __call__
    return await self.inner(wrapper.scope, receive, wrapper.send)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\auth.py", line 185, in __call__
    return await super().__call__(scope, receive, send)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\middleware.py", line 26, in __call__
    return await self.inner(scope, receive, send)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\routing.py", line 150, in __call__
    return await application(
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\consumer.py", line 94, in app
    return await consumer(scope, receive, send)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\consumer.py", line 58, in __call__
    await await_many_dispatch(
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\utils.py", line 51, in await_many_dispatch
    await dispatch(result)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\consumer.py", line 73, in dispatch
    await handler(message)
  File "C:\Users\dines\Desktop\trying_again\venv\lib\site-packages\channels\generic\websocket.py", line 238, in websocket_disconnect
    await self.disconnect(message["code"])
TypeError: ChatConsumer.disconnect() takes 1 positional argument but 2 were given

Я делаю приложение для чата, используя каналы django. Я мало что знаю об этих каналах или чате в django, при этом я следил за одним видео, я сделал все правильно, как показано в видео, но я борюсь с этим с очень долгое время я искал и делал все возможное, чтобы решить эту проблему, но я этого не сделал. Если кто-нибудь знает об этом, пожалуйста, помогите мне...

1 ответ

Сигнатура методаAsyncWebsocketConsumer.disconnectчтоChatConsumer.disconnectoverrides таков, что он вызывается с кодом сообщения, когда веб-сокет закрывается.

Ваша реализация переопределения метода должна быть следующей:

          async def disconnect(self, code):
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name,
        )
Другие вопросы по тегам