Django-channels - 基于网址

时间:2017-12-03 13:58:31

标签: python django websocket django-channels

我对django-channels很新,所以这可能是一个非常简单的问题。

在我们的网站上,有一个永久按钮"消息"在标题中。我希望用户立即收到有关新消息的通知。所以我为此目的使用频道。如果创建了新消息,我会通过channels向客户端发送一些未经过readed的会话:

class Message(..):
    def save(...):
        notify_recipient(self)

    def notify_recipient(self):
        Group('%s' % self.recipient).send({
            "text": json.dumps({
                "message":{"text":truncatechars(self.text,100)},
                "unreaded_conversations":Conversation.objects.get_unreaded_conversations(self.recipient).count(),
            }),
        })

base.html

            const webSocketBridge = new channels.WebSocketBridge();
            webSocketBridge.connect('/notifications/');
            webSocketBridge.listen(function (action, stream) {
                console.log(action, stream);
                var conversations_sidebar = $('#id_conversations_sidebar');
                var messages_list = $('#messagesList');
                if (action.unreaded_conversations) {
                    $('#id_unreaded_conversations_count').text(action.unreaded_conversations);
                }

另一方面,有一个页面/chat/detail/<username>/,用户可以在这里互相聊天。这个聊天应该是实时的,所以我需要通过渠道接收消息。

目前,我已向notify_recipient方法添加了呈现的消息,但问题是它必须始终呈现消息,即使用户不在此/chat/detail/<username>/网址上也是如此效率不高。

您是否知道如何仅在用户处于当前聊天时收到呈现的消息?

routing.py

@channel_session_user
def message_handler(message):
    message.reply_channel.send({"accept": True})


@channel_session_user_from_http
def ws_connect(message,):

    Group("%s" % message.user).add(message.reply_channel)
    message.reply_channel.send({"accept": True})


channel_routing = [

    route("websocket.receive", message_handler),  # we register our message handler
    route("websocket.connect", ws_connect)  # we register our message handler
]

0 个答案:

没有答案