我应该在Django中使用websockets或REST来获取用户ID吗?

时间:2017-09-21 07:43:54

标签: django python-2.7 python-3.x django-rest-framework django-channels

我在我的项目REST中用于注册和用户身份验证。当用户登录时,他可以使用websockets将消息发送到后端。我将所有消息保存到我的数据库中。在我的数据库中,我有idmessage列。我想添加向后端发送消息的用户的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)

0 个答案:

没有答案