Python 如何在基于Django websockets的实时聊天机器人中向PostgreSQL添加数据?

Python 如何在基于Django websockets的实时聊天机器人中向PostgreSQL添加数据?,python,django,postgresql,python-3.x,django-rest-framework,Python,Django,Postgresql,Python 3.x,Django Rest Framework,我正在尝试使用Django后端和Angular 4前端以及PostgreSQL数据库创建实时聊天。让我们假设我想创建聊天机器人,例如。在我看来,最好的解决方案是使用WebSocket?我使用Redis创建通道层。现在,我想将所有消息保存到我的PostgreSQL数据库中。我不知道该怎么做。我应该创建模型并在consumers.py中使用它们吗?或者有另一种更优化的方法吗?将来,我想分析数据库中的数据并返回答案 consumers.py: # In consumers.py from channe

我正在尝试使用Django后端和Angular 4前端以及PostgreSQL数据库创建实时聊天。让我们假设我想创建聊天机器人,例如。在我看来,最好的解决方案是使用WebSocket?我使用Redis创建通道层。现在,我想将所有消息保存到我的PostgreSQL数据库中。我不知道该怎么做。我应该创建模型并在
consumers.py中使用它们吗?或者有另一种更优化的方法吗?将来,我想分析数据库中的数据并返回答案

consumers.py:

# In consumers.py
from channels import Group

# 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):
    Group("chat").send({
        "text": message.content['text'],
    })
    print(message.content['text'])

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

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

channel_routing = [
    route("websocket.connect", ws_connect),
    route("websocket.receive", ws_receive),
    route("websocket.disconnect", ws_disconnect),
]
settings.py:

CHANNEL_LAYERS = {
    "default": {
        # This example app uses the Redis channel layer implementation asgi_redis
        "BACKEND": "asgi_redis.RedisChannelLayer",
        "CONFIG": {
            "hosts": [(redis_host, 6379)],
        },
        "ROUTING": "backend.routing.channel_routing",
    },
}

我也有同样的问题,所以在
models.py中创建一个模型,例如
Message
model

class Message(models.Model):
    message = models.TextField()
并将其导入到
consumers.py

#consumers.py
from .models import Message

def ws_receive(message):
Group("chat").send({
    "text": message.content['text'],
})
msg = Message()
msg.message = message.content['text']
msg.save()
但如果在生产中使用此代码段,它将影响数据库性能。但正如我所听说的,您可以使用python模块创建某种队列,并保存该队列中的消息。我还没有看到自定义队列的实现,所以您应该自己创建