Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通道-收到信号时,如何通过websocket发送数据?_Python_Django_Django Channels_Django Signals - Fatal编程技术网

Python 通道-收到信号时,如何通过websocket发送数据?

Python 通道-收到信号时,如何通过websocket发送数据?,python,django,django-channels,django-signals,Python,Django,Django Channels,Django Signals,我想通过websocket从数据库中传输数据。基本上,每秒都会有一条新记录插入到数据模型中,我想在插入新记录后立即通过websocket发送它。有人建议我在调用模型的save()方法时使用signal。因此,我在models.py中添加了以下内容: def save_post(sender, instance, **kwargs): print('signal') post_save.connect(save_post, sender=DataModel) 我应该在save_post的

我想通过websocket从数据库中传输数据。基本上,每秒都会有一条新记录插入到数据模型中,我想在插入新记录后立即通过websocket发送它。有人建议我在调用模型的save()方法时使用signal。因此,我在models.py中添加了以下内容:

def save_post(sender, instance, **kwargs):
    print('signal')
post_save.connect(save_post, sender=DataModel)

我应该在
save_post
的内部以及我的consumers.py上放置什么以便数据通过?

您首先必须使用以下代码连接到django通道层:

from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
channel_layer = get_channel_layer()
data = <your-data> # data you want to send
async_to_sync(channel_layer.group_send(<group_name>, {
    "type": "notify",
    "message": data
}))
并将在
消费者
类中为所有拥有组的用户调用名为
通知
(函数名称由您选择)的函数

有关更多信息,您可以在此处使用工作示例:

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("localhost", 6379)],
        },
    },
}
async def notify(self, event):
    data = event["message"]
    # here you can do whatever you want to do with data