在Django中关于post_save信号发送通知

时间:2019-09-11 15:41:53

标签: django django-channels

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

2 个答案:

答案 0 :(得分:0)

您可以简单地为post_save添加信号

@receiver(post_save, sender=Deposit)
def signal_deposit_save(sender, instance, created, **kwargs):
    if created: # This means it is a new row
        # Send notification using django-channels

答案 1 :(得分:0)

是的,这就是我最近使用的方式。 您可以使用Django模型的save方法,如下所示:

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

const YTDL = require('ytdl-core') function play(connection, message) { var server = servers[message.guild.id] server.dispatcher = connection.playStream(YTDL(server.queue[0], {filter: "audioonly"})) server.dispatcher.on("end", function() { if(server.queue[0]) { play(connection, message) const args = server.queue[0] YTDL.getInfo(args, function(err, info) { const title = info.title message.channel.send(`:musical_note: **${title}** is now playing!`) }) server.queue.shift() } else { connection.disconnect() message.channel.send(":warning: There are no more songs in the queue!") } }) } class playCommand extends commando.Command { constructor(client) { super(client, { name: 'play', group: 'simple', memberName: 'play', description: 'idfl' }) } async run(message, args) { if(!args[0]) { message.channel.send("Please provide a link") return; } if(!message.member.voiceChannel) { message.channel.send("You must be in a voice channel") return; } if (message.content.includes("http://") || message.content.includes("https://")) { if (message.content.includes("youtube") || message.content.includes("youtu.be")) { if(!servers[message.guild.id]) servers[message.guild.id] = {queue: []} var server = servers[message.guild.id] server.queue.push(args) if(!message.guild.voiceConnection) message.member.voiceChannel.join().then(function(connection) { play(connection, message) const args = message.content.split(" ").slice(1); YTDL.getInfo(args.join(" "), function(err, info) { const title = info.title message.channel.send(`:musical_note: **${title}** is now playing!`) }) server.queue.shift() }) } else { message.reply("Only youtube links!") } } else { message.reply("Only youtube links!") } } } module.exports = playCommand; 是我的模型中的一个字段,当然,您还必须设置路由,redis_channels等。

相关问题