class ChatConsumer(AsyncWebsocketConsumer): async def websocket_connect(self, message): # 接收客户端请求 # self.accept() await self.channel_layer.group_add( "chat_group", self.channel_name, ) await self.accept() await self.send("连接") async def websocket_receive(self, message, ): await self.channel_layer.group_send( "chat_group", { "type": "chat_message", "message": message, }, ) await self.send("999999") print(message) await self.send("已收到") print("shoudao") check = message.get('check') print(check) file_data = message.get('file') print(file_data) await self.send('正在打开数据...') # df = pd.read_excel('received_file.xlsx',engine='openpyxl') df = pd.read_excel(file_data) def websocket_disconnect(self, message): print("断开连接") raise StopConsumer() socket.onmessage = function (event) { let tag = document.createElement("div") tag.innerText = event.data document.getElementById("message").appendChild(tag); console.log(tag) } def index(request): if request.method == "GET": return render(request, 'index.html') if request.method == "POST": file = request.FILES.get("file") check = request.POST.get('check') # main(file, check, 15) # 获取Channel层对象 channel_layer = get_channel_layer() # 发送消息到ChatConsumer的websocket_receive方法 async_to_sync(channel_layer.group_send)('chat_group', { 'type': 'websocket.receive', 'file': file, 'check': check, }) # main(file, check, 15) return render(request, 'index.html')前端弹窗中可以接收def websocket_connect的self.send但却接收不到 websocket_receive中的self.send内容,但websocket_receive中的print都可以正常运行,是怎么回事?且报 No handler for message type chat_message的错误
时间: 2024-04-17 11:24:23 浏览: 158
根据你提供的代码,我注意到在`websocket_receive`方法中你使用了`self.channel_layer.group_send()`方法发送消息给群组`chat_group`,但是前端无法接收到该消息。
这是因为`self.channel_layer.group_send()`方法发送的消息会被后台处理,而不会直接发送给前端。在`websocket_receive`方法中,你可以使用`self.send()`方法向客户端发送消息。但是请注意,`self.send()`方法应该在`self.channel_layer.group_send()`之前调用,以确保消息能够传递到前端。
以下是修正后的代码示例:
```python
class ChatConsumer(AsyncWebsocketConsumer):
async def websocket_connect(self, message):
await self.channel_layer.group_add("chat_group", self.channel_name)
await self.accept()
await self.send("连接")
async def websocket_receive(self, message):
await self.send("999999")
print(message)
await self.send("已收到")
print("shoudao")
check = message.get('check')
print(check)
file_data = message.get('file')
print(file_data)
await self.send('正在打开数据...')
# df = pd.read_excel('received_file.xlsx',engine='openpyxl')
df = pd.read_excel(file_data)
await self.send(df.to_dict()) # 将数据发送给前端
def websocket_disconnect(self, message):
print("断开连接")
raise StopConsumer()
```
在上述示例中,我将`df.to_dict()`作为数据通过`await self.send()`方法发送给前端。你可以根据需要修改发送的数据格式。
请确保前端代码能够正确处理接收到的消息,并在前端弹窗中显示数据。如果你仍然遇到`No handler for message type chat_message`错误,请确保在后台代码中正确定义了`chat_message`类型的消息处理方法。
阅读全文