关于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
model
和fields
类属性对我有意义。组名也似乎合理,因为我们想知道哪个组广播更新。许可也是不言自明的。但是,我只是不明白为什么在这里需要流。
请注意,在Demultiplexer
类中,我们明确声明message-stream
映射到MessageBinding,为什么MessageBinding需要知道这条信息?
一个合理的答案是,流专门用于客户端向服务器发送websocket消息以修改模型。但为什么团队不足以完成这一壮举?为什么还有一层抽象?
由于