使用Django Server已发送事件和数据库保存

时间:2017-01-09 20:32:22

标签: django generator server-sent-events

我正在尝试在Django Framework中实现服务器发送事件(SSE)。我很清楚,我可以像这样实现view

@csrf_exempt
def event_stream(request):
    def eventStream():
        yield "data:Server Sent Data\n\n"

    response = HttpResponse(eventStream(), content_type="text/event-stream")
    response['Cache-Control'] = 'no-cache'
    return response

但是我想在数据库表中从表的post_save创建一个新条目时触发SSE调用,我可以在这里实现这一点,因为eventStream这里是发电机功能。

2 个答案:

答案 0 :(得分:9)

Django是围绕请求/响应周期构建的,这意味着它不能与websockets甚至SSE一起使用。在您的示例中,除非您在视图中使用订阅队列(rabbitmq,redis pubsub)并在信号处理程序中发送数据,否则无法将post_save信号传播到视图。

考虑从服务器推送的其他解决方案:

  • 长轮询
  • Django channels
  • 像nodejs或龙卷风一样的异步解决方案,或者与Django一起使用

答案 1 :(得分:0)

了解信号。 https://docs.djangoproject.com/en/dev/topics/signals/ 在这种情况下,您应该使用request_started和post_save信号