.save 方法未触发信号

时间:2021-06-10 13:07:08

标签: django-models django-signals

我想为警报创建一个流式 API(服务器发送的事件),即新添加的警报应该作为服务器发送的事件发送到打开的连接。为此,我正在使用 StreamingHttpResponse。标头设置为文本/事件流,因为它应该用于 SSE。我有一个模型可以处理数据库中的警报。我已经编写了一个signals.py 文件,它为警报模型的post_save 和警报模型的post_save 事件定义了信号,我返回了带有新添加警报的StreamingHttpResponse。当我第一次获得 API 时,我会收到所有警报的响应,但在向数据库添加新警报时不会收到新添加的警报。我做错了什么?

监控/signals.py

    @receiver(post_save, sender=Alert)
    def send_alert(sender, instance, **kwargs):
        qs_json = serializers.serialize('json', instance)
        return StreamingHttpResponse(qs_json, content_type='text/event-stream')

监控/views.py

    # just importing defined signal receiver here
    from .signals import send_alert
    
    # endpoint view function
    def get_alerts(self):
        queryset = Alert.objects.all().order_by('-date')
        resolved = self.request.query_params.get('resolved')
        server = self.request.query_params.get('server')
        source = self.request.query_params.get('source')
        if source is not None:
            queryset = queryset.filter(source=source)
        if resolved is not None:
            queryset = queryset.filter(resolved=resolved)
        if server is not None:
            queryset = queryset.filter(server=server)
        return HttpResponse(queryset)

即使我自己在 Django shell 上点击 DB 上的 .save 方法,也不会触发信号。

        >>> from monitoring.models import Alert
        >>> a=Alert(container="something")
        >>> s.save() 

0 个答案:

没有答案