如何在Django频道中关联流和组

时间:2018-02-07 01:40:09

标签: python django django-channels

关于Django频道中的数据绑定,我不知道流的概念是如何必要的。也许我没有看到这里的大局,我希望有人可以指出我的误解。

让我用一个例子来表达我的困惑。

我有一个基于Django的message模型。我希望在创建,更新或销毁消息时向我的客户端广播更新。所以我创建了两个东西,数据绑定和解复用器。

class MessageDemultiplexer(WebsocketDemultiplexer):
    consumers = {
        'message-stream': MessageBinding.consumer, 
    }

    def connection-groups(self):
        return ['message-update']

我通过频道路由将我的websocket流量路由到此多路分解器。

route_class(MessageDemultiplexer, path="^/messages/")

根据我的理解,无论何时连接客户端,他/她都被放入一个名为message-update的组中。因此,如果我要向这个组播放任何内容,我的客户都会收到一条消息。

现在,我们来看看绑定类

class MessageBinding(WebsocketBinding):
    model = Message
    stream = 'message-stream'
    fields = ['__all__']

    def group_names(cls, instance):
        return ['message-update']

    def has_permission(self, user, action, pk):
        return True

modelfields类属性对我有意义。组名也似乎合理,因为我们想知道哪个组广播更新。许可也是不言自明的。但是,我只是不明白为什么在这里需要流。

请注意,在Demultiplexer类中,我们明确声明message-stream映射到MessageBinding,为什么MessageBinding需要知道这条信息?

一个合理的答案是,流专门用于客户端向服务器发送websocket消息以修改模型。但为什么团队不足以完成这一壮举?为什么还有一层抽象?

由于

0 个答案:

没有答案