gpt4 book ai didi

python - 如何使用 PostgreSQL 数据库创建基于 WebSockets 的简单 Django 聊天?

转载 作者:太空宇宙 更新时间:2023-11-03 14:49:35 26 4
gpt4 key购买 nike

我尝试根据 Django documentation 使用 WebSockets 创建支持的 Django 。我想接收消息,将其保存到我的 PostgreSQL 数据库并将响应发送给同一用户。此时消息可能与收到的消息相同。我尝试按照下面所示的方式执行此操作,但我得到:

django_1  | 2017-08-31 08:30:52,050 - ERROR - worker - Error processing message with consumer backend.consumers.msg_consumer:
django_1 | Traceback (most recent call last):
django_1 | File "/usr/local/lib/python3.6/site-packages/channels/worker.py", line 119, in run
django_1 | consumer(message, **kwargs)
django_1 | File "/code/backend/consumers.py", line 11, in msg_consumer
django_1 | message=message.content['message'],
django_1 | KeyError: 'message'

路由.py:

from channels.routing import route
from backend.consumers import ws_connect, ws_receive, ws_disconnect, msg_consumer

channel_routing = [
route("websocket.connect", ws_connect),
route("websocket.receive", ws_receive),
route("websocket.disconnect", ws_disconnect),
route("chat", msg_consumer),
]

模型.py:

from django.db import models

class Message(models.Model):
message = models.CharField(max_length=200)

消费者.py:

from channels import Group
from .models import Message
from channels import Channel
import json


# Connected to chat-messages
def msg_consumer(message):
# Save to model
Message.objects.create(
data=json.loads(message['text']),
message = data['message']
)
# Broadcast to listening sockets
Group("chat").send({
"text": message.content['message'],
})

# Connected to websocket.connect
def ws_connect(message):
# Accept the connection
message.reply_channel.send({"accept": True})
# Add to the chat group
Group("chat").add(message.reply_channel)

# Connected to websocket.receive
def ws_receive(message):
Channel("chat").send({
"text": message.content['text'],
})
print(message.content['text'])

# Connected to websocket.disconnect
def ws_disconnect(message):
Group("chat").discard(message.reply_channel)

我改变了:

Message.objects.create(
message=message.content['message'],
)

Message.objects.create(
data=json.loads(message['text']),
message = data['message']
)

最佳答案

试试这个:

from channels import Group
from .models import Message
from channels import Channel


def msg_consumer(message):
text = message.content.get('text')
Message.objects.create(
message=text,
)
Group("chat").send({'text': text})


def ws_connect(message):
message.reply_channel.send({"accept": True})
Group("chat").add(message.reply_channel)


def ws_receive(message):
Channel("chat").send({
"text": message.content['text'],
})


def ws_disconnect(message):
Group("chat").discard(message.reply_channel)

更新的解决方案

关于python - 如何使用 PostgreSQL 数据库创建基于 WebSockets 的简单 Django 聊天?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45976889/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com