我正在尝试将用户添加到Django频道组中,但是我不知道该用户的频道名称。只有他们的数据库ID /用户名。我一直在阅读频道的文档,但无法发现这些频道名称的存储位置。
通常,我可以从渠道的传播者内部,通过以下方式将传播者的用户添加到组中:
class OrderConsumer(AsyncJsonWebsocketConsumer):
def __init__(self, scope): ...
async def connect(self): ...
async def add_user_to_group(self, group_name):
await self.channel_layer.group_add(
group=group_name,
channel=self.channel_name
)
是否可以通过数据库访问另一个用户的“ self.channel_name”?还是其他?如果可以,怎么办?
我正在使用InMemoryChannelLayer进行测试:
TEST_CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels.layers.InMemoryChannelLayer',
},
}
但是我的实时部署中有一个redis数据库(借助于channels-redis)。 这会有所作为吗?
答案 0 :(得分:0)
if( $(".carousel-item").first().hasClass("active") ){
// do something
}
是在您的channel_name
中定义的,并且routing.py
应该是您的消费者类中的一个属性:
group_name
因此,当用户访问连接到您的websocket的网址时,您可以通过class MyConsumer(WebsocketConsumer):
#
@property
def group_name(self):
name = ...
return name
方法拒绝或接受它们。
后端实现选择无关。
答案 1 :(得分:0)
您已经发现,通道名称是由通道服务器分配的,因此无法为给定用户计算通道名称。大多数人要跟踪单个用户的频道,就是将每个用户添加到一个唯一组,该组的名称是根据用户的DB ID或任何其他唯一字段生成的。这样,如果您想向特定用户发送消息,则可以轻松地根据用户数据计算其组名