我在我的项目REST中用于注册和用户身份验证。当用户登录时,他可以使用websockets将消息发送到后端。我将所有消息保存到我的数据库中。在我的数据库中,我有id
和message
列。我想添加向后端发送消息的用户的id。我的模型以这种方式看待:
class Message(models.Model):
message = models.CharField(max_length=200)
我想实现这个目标:
from django.contrib.auth.models import User
class Message(models.Model):
user = models.ForeignKey('auth.User')
message = models.CharField(max_length=200)
我的问题是我应该如何使用他的消息将用户ID添加到我的数据库中。应该使用websockets或REST中的标题头来发送此用户的ID?
consumers.py:
def msg_consumer(message):
text = message.content.get('text')
Message.objects.create(
message=text,
)
Group("chat").send({'text': text})
def ws_connect(message):
# Accept the connection
message.reply_channel.send({"accept": True})
# Add to the chat group
Group("chat").add(message.reply_channel)
message.reply_channel.send({
"text": json.dumps({
'message': 'Welcome'
})
})
def ws_receive(message):
message.reply_channel.send({"accept": True})
print("Backend received message: " + message.content['text'])
Message.objects.create(
message = message.content['text'],
)
更新 目前我按照下面显示的方式尝试,但我不确定它是否正确完成?另外我想知道是否可以为所有用户使用一个URL?例如,每个客户端使用localhost:8000,但聊天是分开的,用户只能看到自己的消息和来自后端的响应。他无法访问另一个聊天记录。此外,我必须确保websockets的每个用户ID与REST的用户ID相同。
routes.py:
route("websocket.connect", ws_connect, path=r"^/(?P<room_name>[a-zA-Z0-9_]+)/$"),
route("websocket.receive", ws_receive, path=r"^/(?P<room_name>[a-zA-Z0-9_]+)/$"),
route("websocket.disconnect", ws_disconnect, path=r"^/(?P<room_name>[a-zA-Z0-9_]+)/$"),
consumers.py:
@channel_session_user_from_http
def ws_connect(message):
# Accept the connection
message.reply_channel.send({"accept": True})
# Add to the chat group
Group("chat-%s" % message.user.username[0]).add(message.reply_channel)
message.reply_channel.send({
"text": json.dumps({
'message': 'Welcome'
})
})
@channel_session_user
def ws_receive(message):
message.reply_channel.send({"accept": True})
print("Backend received message: " + message.content['text'])
Message.objects.create(
message = message.content['text'],
)
Channel("chat-%s" % message.user.username[0]).send({
"text": json.dumps({
'message': 'Can we start?'
})
})
@channel_session_user
def ws_disconnect(message):
Group("chat-%s" % message.user.username[0]).discard(message.reply_channel)