gpt4 book ai didi

django - 在 django 中发送关于 post_save 信号的通知

转载 作者:行者123 更新时间:2023-12-05 00:47:12 25 4
gpt4 key购买 nike

我有一个名为 deposit 的模型,我正在尝试在表中添加新行时发​​送实时通知。是否可以使用 django-channels 这样做?

最佳答案

您可以使用 Django 模型的 save 方法,如下所示:

from asgiref.sync import async_to_sync
from channels.layers import get_channel_layer

class Info(models.Model):
# your model fields

def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
super(Info, self).save(force_insert, force_update, using, update_fields)
# send info to channel
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(
'infochannel',
{
'type': 'infochannel.message',
'device_id': str(self.device_id)
}
)

在消费者中:

from channels.generic.websocket import AsyncWebsocketConsumer

class DataConsumer(AsyncWebsocketConsumer):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.group_name = ''

async def connect(self):
# we are using one fixed group
self.group_name = 'infochannel'

await self.channel_layer.group_add(
self.group_name,
self.channel_name
)
await self.accept()

async def disconnect(self, close_code):
await self.channel_layer.group_discard('infochannel', self.channel_name)

async def infochannel_message(self, event):
# Send message to websocket group
await self.send(text_data=event['device_id'])

其中device_id是我模型上的一个字段,当然你还得设置路由、redis_channels等等。

关于django - 在 django 中发送关于 post_save 信号的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57892609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com