В ChatConsumer() отсутствуют 2 обязательных позиционных аргумента: 'receive' и 'send', в чем ошибка?
Я не могу понять, почему я получаю ошибку. Я пробовал разные подходы, но все равно сталкиваюсь с проблемой в consumers.py. В чем проблема, и что я делаю не так?
messaging_users/routing.py
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from messaging_users import consumers
websocket_urlpatterns = [
path('ws/messaging_users/', consumers.ChatConsumer.as_asgi()),
]
application = ProtocolTypeRouter({
'websocket': AuthMiddlewareStack(
URLRouter(
websocket_urlpatterns
)
),
})
messaging_users/consumers.py
from channels.generic.websocket import AsyncWebsocketConsumer
import json
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, close_code):
pass
async def receive(self, text_data):
data = json.loads(text_data)
message = data['message']
await self.send(text_data=json.dumps({
'message': 'Received message: ' + message
}))
js:
<script>
const socket = new WebSocket('ws://localhost:8000/ws/messaging_users/');
socket.onopen = function() {
console.log('WebSocket connection established.');
};
socket.onmessage = function(event) {
const data = JSON.parse(event.data);
console.log('Received message:', data.message);
};
function sendMessage(message) {
if (socket.readyState === WebSocket.OPEN) {
// WebSocket is ready to send a message
socket.send(JSON.stringify({
'message': message
}));
} else {
console.error('WebSocket is not ready to send a message. Please wait until the connection is established.');
// You can add code here for retrying message sending or other error handling
}
}
// Call sendMessage when clicking the send message button
function handleSendMessageButtonClick() {
const messageText = document.getElementById('id_body').value;
sendMessage(messageText);
}
</script>
TypeError: ChatConsumer() отсутствуют 2 обязательных позиционных аргумента: 'receive' и 'send'
"GET /ws/messaging_users/ HTTP/1.1" 500 66917
Самое простое исправление, которое я вижу, чтобы попробовать, это сделать это вместо этого, в routing.py
:
websocket_urlpatterns = [
path('ws/messaging_users/', consumers.ChatConsumer), # without .as_asgi()
]
Непередача самого класса может быть причиной того, что ваша функция ведет себя неожиданно