Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django频道在哪里存储用户的频道名称?_Python_Django_Websocket_Python Asyncio_Django Channels - Fatal编程技术网

Python Django频道在哪里存储用户的频道名称?

Python Django频道在哪里存储用户的频道名称?,python,django,websocket,python-asyncio,django-channels,Python,Django,Websocket,Python Asyncio,Django Channels,我正在尝试将用户添加到django频道组,但我不知道该用户的频道名称。只有他们的数据库id/用户名。我一直在阅读频道的文档,但未能发现这些频道名称存储在何处 通常,在通道的通信器中,我可以将通信器的用户添加到具有以下内容的组中: class OrderConsumer(AsyncJsonWebsocketConsumer): def __init__(self, scope): ... async def connect(self): ... async def ad

我正在尝试将用户添加到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_名称?还是别的?如果是,怎么做

我正在使用InMemoryChannel Layer进行测试:

TEST_CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels.layers.InMemoryChannelLayer',
    },
}
但是在我的实时部署中,在通道redis的帮助下,有一个redis数据库。这会有所不同吗?

频道名称在您的routing.py中定义,组名称应该是您的consumer类中的属性:

class MyConsumer(WebsocketConsumer):

    #

    @property
    def group_name(self):
        name = ...
        return name
所以,当用户访问连接到websocket的url时,您可以在连接方法中拒绝或接受它们


后端实现选择是不相关的。

正如您已经发现的,频道名称由频道服务器分配,无法为给定用户计算。大多数人跟踪单个用户的频道所做的是将每个用户添加到一个唯一的组中,该组的名称由用户的DB id或任何其他唯一字段生成。这样,如果您想向特定用户发送消息,您可以根据用户的数据轻松计算出他的组名

我仍然不明白。每个连接到websocket的用户都有自己唯一的频道名称。您是说我可以根据routing.py实现查看这些文件的存储位置吗?在我的routing.py实现中,或者在我使用的任何类中,都没有明确定义通道_名称。那么,我可能误解了您的意思:您是否希望以其他方式将用户添加到组中,而不是通常在连接时通过使用者?您好。对我想添加一个单独的用户[user 2],我的意思是,当用户1调用消费者中的函数时,用户2的id附加在数据中,我提出了一个更详细的问题,我知道该用户的id属于一个组,而具有不同消费者的用户[user 1]。我很感激你花费的时间和精力。那么,我可以说是亲吻,甚至是雅格尼吗P您的订单已创建,您知道如何以常规方式将买家添加到订单组。使用Django消息传递系统或其他任何您想要通知店主的新订单,只需创建一个指向该订单的简单链接。店主访问url后,他将被添加到组中,当他们离开页面时,他们也将自动离开组。这也适用于买家——这就是你应该如何处理WebSocket的方式,对于其他一切,都有好的ol'Django。