Django channels - не приходят данные из js в метод websocket_disconnect
У меня есть приложение чат, я хочу реализовать чтение всех сообщений в момент когда определенный пользователь отключается от активного чата. Я могу получить пользователя с помощью self.scope['user']
, но у меня не получается получить активный чат из chatroom.js
.
Код:
consumers.py
class ChatConsumer(AsyncConsumer):
async def websocket_connect(self, event):
print('connected', event)
...
async def websocket_receive(self, event):
print('receive', event)
...
async def websocket_disconnect(self, event):
print('disconnect', event)
received_data = json.loads(event['text'])
user = self.scope['user']
chat_id = received_data.get('chat_id')
chat_obj = await self.get_thread(chat_id)
await self.disconnect_update_read_status(chat_obj, user)
await self.send({'text': event['text']})
chatroom.js
let loc = window.location
let wsStart = 'ws://'
if(loc.protocol === 'https') {
wsStart = 'wss://'
}
let endpoint = wsStart + loc.host + loc.pathname
var socket = new WebSocket(endpoint)
socket.onopen = async function(e){
console.log('open', e)
...
}
socket.onmessage = async function(e){
console.log('message', e)
...
}
socket.onerror = async function(e){
console.log('error', e)
}
socket.onclose = async function(e){
console.log('close', e)
let thread_id = get_active_thread_id()
let data = {
'chat_id': thread_id
}
data = JSON.stringify(data)
socket.send(data)
}
Я пробовал это решение но получил ошибку из-за того, что метод не получает данные('text') из chatroom.js
, как я понимаю. Как сделать так что б в метод websocket_disconnect()
пришли данные из chatroom.js
?
disconnect {'type': 'websocket.disconnect', 'code': 1001}
WebSocket DISCONNECT /chat/ [172.20.0.1:54750]
Exception inside application: 'text'
Traceback (most recent call last):
File "/usr/local/lib/python3.9/site-packages/channels/staticfiles.py", line 44, in __call__
...
File "/usr/src/auto_store/chat/consumers.py", line 88, in websocket_disconnect received_data = json.loads(event['text'])
KeyError: 'text'
Спасибо за помощь