Django при смене пользователя сообщение не приходит из веб-сокета
Я использую веб-сокеты (каналы) в своем проекте django.Сначала при перезагрузке страницы все идет нормально, но когда я хочу пообщаться с другим пользователем, я нажимаю на другого пользователя (запускаю функцию runChatUser из javascript, которая находится в app. js), после чего сообщение отправляется через веб-сокет и принимается через веб-сокет, но в app.js chatSocket.onmessage операция console.log(data) не появляется в консоли javascript. Значит, я не добавил html сообщение в чат. Я пытаюсь исправить это в течение нескольких дней, но у меня не получается. Кто-нибудь может мне помочь?
app.js
consumers.py
# chat/consumers.py
import json
from asgiref.sync import async_to_sync
from channels.generic.websocket import WebsocketConsumer
from chat.models import Message
class ChatConsumer(WebsocketConsumer):
def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_group_name = 'chat_%s' % self.room_name
print("web socket connected ")
# Join room group
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self, close_code):
print("web socket closed")
# Leave room group
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name,
self.channel_name
)
# Receive message from WebSocket
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
# Send message to room group
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': message,
}
)
# Receive message from room group
def chat_message(self, event):
message = event['message']
# Send message to WebSocket
self.send(text_data=json.dumps({
'message': message,
}))
routing.py
# chat/routing.py
from django.urls import re_path
from . import consumers
websocket_urlpatterns = [
re_path(r'ws/chat/(?P<room_name>[^/]+)/$', consumers.ChatConsumer.as_asgi()),
]
views.py
def get_user(request,room_id):
if request.method=='GET' and request.is_ajax():
room=get_object_or_404(Room,id=room_id)
if request.user == room.first_user:
second_user=room.second_user
else:
second_user=room.first_user
data ={
"second_user_name":second_user.get_full_name(),
"image":second_user.image.url,
"messages":list(Message.objects.filter(room_id=room_id).all().values()),
}
return JsonResponse(data,safe=True)
return JsonResponse({'status':'Fail', 'msg': 'Object does not exist'})
index.html