
[英]One Django Channels websocket consumer used across whole site?
[英]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.