Django websocket не может отправить данные клиенту после их получения

class WSTestView(WebsocketConsumer):
    def connect(self):
        self.accept();

        self.send(json.dumps({'status': 'sent'})) # client receives this
    
    def receive(self, text_data=None, bytes_data=None):
        notifications = Notification.objects.filter(receiver=text_data) # receives user id
        serializer = NotificationSerializer(notifications, many=True).data

        self.send(serializer) # client does not receives this

Frontend

// ...
useEffect(() => {
    socket.onmessage = (e) => { console.log(e.data) }
  }, [])
// ...

Я только начал работать с django-channels и работаю над потребителем, который отправляет уведомления пользователю, когда получает его id, но на фронтенде событие onmessage ничего не получает, как я могу это исправить и есть ли лучший способ, которым я могу это реализовать?

Вероятно, это ваш front end, а не django-channels, если вы можете подключиться к нему. Наиболее вероятной причиной является то, что ваш onmessage связывается после того, как из-за компонентаDidMount/useEffect сервер уже отправил сообщение.

Попробуйте просто как тест, чтобы исключить это. Чтобы поставить

socket.onmessage = (e) => { console.log(e.data) }

Сразу после new WebSocket.... Дайте мне знать, если это выведет что-то в консоль. Другой способ проверить/изолировать это с помощью онлайнового тестера WebSocket, например, такой https://www.lddgo.net/en/network/websocket

class WSTestView(WebsocketConsumer):
    def connect(self):
        self.accept();

        self.send(json.dumps({'status': 'sent'}))
    
    def receive(self, text_data=None, bytes_data=None):
        notifications = Notification.objects.filter(receiver=text_data) # receives user id
        serializer = NotificationSerializer(notifications, many=True).data

        self.send(json.dumps(serializer)) # <-------
  1. Нужно преобразовать сериализованные данные в строку JSON.

Frontend

useEffect(() => {
    socket.onmessage = (e) => { console.log(e.data) }
  }, [socket]) // <-------
  1. Нужно поместить переменную socket в массив зависимостей
Вернуться на верх