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

我应该在Django中使用WebSocket或REST获取用户ID吗?,django,python-2.7,python-3.x,django-rest-framework,django-channels,Django,Python 2.7,Python 3.x,Django Rest Framework,Django Channels,我在项目中使用REST进行注册和用户身份验证。当用户登录时,他可以使用WebSocket向后端发送消息。我把他的所有信息都保存到我的数据库里。目前在我的数据库中有id和message列。我还想添加向后端发送消息的用户的id。我的模型看起来是这样的: class Message(models.Model): message = models.CharField(max_length=200) 我想做到这一点: from django.contrib.auth.models import

我在项目中使用REST进行注册和用户身份验证。当用户登录时,他可以使用WebSocket向后端发送消息。我把他的所有信息都保存到我的数据库里。目前在我的数据库中有
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与他的消息一起添加到我的数据库中。应该使用WebSocket发送此用户的ID,或者在REST中使用例如header

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'],
    )
@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)
更新 目前,我尝试以下所示的方式,但我不确定是否正确完成?此外,我想知道是否可以为所有用户使用一个URL?例如,每个客户端都使用localhost:8000,但聊天是分开的,用户只能看到自己的消息和来自后端的响应。他没有其他聊天的机会。此外,我必须确保WebSocket的每个用户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_]+)/$"),

您是否已经在
请求
对象中拥有用户的所有详细信息?与REST中的
request.user.id
一样,如果您的意思是
request
,那么是的。但当用户使用websockets发送消息时,他不会发送消息。我的问题是否意味着
如何在Django中获取当前登录用户的用户id?
否,我问的是如何使用websockets和REST对用户进行身份验证。你真的问了吗?:)我认为是这样。我不确定应该使用哪种方式来验证使用WebSocket的用户。因为当我使用REST时,我在头中发送令牌。有了WebSocket,这似乎并不那么容易。但是我对频道没有太多经验。你不是已经在
请求
对象中获得了用户的所有详细信息吗?与REST中的
request.user.id
一样,如果您的意思是
request
,那么是的。但当用户使用websockets发送消息时,他不会发送消息。我的问题是否意味着
如何在Django中获取当前登录用户的用户id?
否,我问的是如何使用websockets和REST对用户进行身份验证。你真的问了吗?:)我认为是这样。我不确定应该使用哪种方式来验证使用WebSocket的用户。因为当我使用REST时,我在头中发送令牌。有了WebSocket,这似乎并不那么容易。但我对频道没有太多经验。