【发布时间】:2021-06-12 05:55:52
【问题描述】:
我希望你们都做得很好。我一直在尝试创建一个通知系统,该系统将通过数据库中的 post_save 信号将消息推送到 websocket。我有一个创建通知的通知模型,我想在向适当的用户创建通知时推送通知,非常感谢任何帮助。
信号.py
def send_message(event):
'''
Call back function to send message to the browser
'''
message = event['text']
channel_layer = channels.layers.get_channel_layer()
# Send message to WebSocket
print("Sending message to websocket")
async_to_sync(channel_layer.send)(text_data=json.dumps(
message
))
@receiver(post_save,sender=Notification)
def notification_handler(sender,instance,created,*args,**kwargs):
message={
'text':instance.text
}
print(message)
user=str(instance.to.pk)
groupname=f"user_{user}"
channel_layer = channels.layers.get_channel_layer()
async_to_sync(channel_layer.group_send)(
groupname,
{
'type': 'send_message',
'text': message
}
)
这就是我的 consumer.py 的样子
consumer.py
class NotificationConsumer(AsyncWebsocketConsumer):
async def websocket_connect(self,event):
print("connected",event)
self.channel_layer=channels.layers.get_channel_layer()
self.user = self.scope['url_route']['kwargs']['user_id']
self.group_name =f"user_{self.user}"
await self.channel_layer.group_add(
self.group_name,
self.channel_name
)
await self.accept()
async def websocket_disconnect(self,event):
print(event,"closed")
【问题讨论】:
标签: python django asynchronous django-channels django-signals