繁体   English   中英

Django频道中的动态用户列表消费者

[英]dynamic user list consumer in Django channels

我将 Django(3.2.11) 与 Postgres 数据库一起使用。 我正在使用 Django 频道创建一个聊天应用程序。 所以我创建了一个消息消费者并将其保存到数据库中。 并且还按房间创建了一个消息历史消费者。 现在我想创建一个用户列表消费者,其中包含带有用户名的动态消息。 为此,我创建了一个返回无限数据的消费者。 喜欢:-

class ChatListConsumer(AsyncJsonWebsocketConsumer):
    async def connect(self):
        self.room_group_name = 'chat_list_%s' % self.scope['user'].user_id
        self.connection = True
        await self.channel_layer.group_add(
            self.room_group_name,
            self.channel_name
        )
        await self.accept()

    async def disconnect(self, close_code):
        self.connection = False
        await self.channel_layer.group_discard(
            self.room_group_name,
            self.channel_name
        )

    def get_serializer(self, obj):
        return {'data': ProductQueryUsersSerializer(
            instance=obj.order_by('-updated_at'), many=True
        ).data, 'type': "chat_list"}

    async def receive(self, text_data):
        while self.connection:
            try:
                self.query = await database_sync_to_async(
                    ProductQueryUsers.objects.filter
                )(Q(seller__user=self.scope['user']) | Q(user=self.scope['user'])
                  )
                data = await database_sync_to_async(self.get_serializer)(self.query)
            except EmptyPage:
                data = {'data': [], 'type': "chat_list"}
            await self.send(text_data=json.dumps(data))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM