You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何实现从views.py向HTML模板持续发送数据

实现views.py向HTML持续推送数据的可行方案

你提到的views.py通常是Django/Flask等Python Web框架的视图文件,HTTP原生的请求-响应模式下,return返回响应后连接就会断开,确实只能完成单次数据传输,要实现持续推送可以选用以下适配不同场景的方案:

1. 服务器发送事件(SSE)

最适合仅需服务端单向推送、不想引入复杂依赖的场景

  • 属于HTTP原生支持的特性,不需要额外安装第三方服务,实现成本极低
  • 核心逻辑:服务端返回响应时将Content-Type设置为text/event-stream,保持连接不关闭,按SSE约定的格式持续写入数据即可
  • Django下views.py示例代码:
from django.http import HttpResponse
import time

def stream_data(request):
    def event_generator():
        # 替换为你自己的业务数据生成逻辑
        for count in range(20):
            # SSE格式要求每条数据以data:开头,\n\n结尾
            yield f'data: 当前推送计数:{count}\n\n'
            time.sleep(1)
    return HttpResponse(event_generator(), content_type='text/event-stream')
  • 前端HTML接收代码:
// 对应你配置的推送接口路由
const eventSource = new EventSource('/stream_data/');
eventSource.onmessage = (event) => {
    // 拿到数据后直接渲染到页面节点即可
    console.log('收到推送数据:', event.data);
}

2. WebSocket双向通信

最适合需要双向交互、对实时性要求高的场景

  • 连接建立后是全双工通信通道,服务端和前端可以随时互相发送数据,延迟远低于SSE
  • Django下可以通过django-channels库实现,Flask下可以用flask-socketio实现
  • 核心注意点:需要将原有的WSGI服务替换为ASGI服务,支持长连接处理

3. 前端轮询(临时简易方案)

适合低频次数据更新、临时测试的场景

  • 不需要修改服务端架构,前端通过setInterval定时向views.py发起请求拉取最新数据,变相实现持续更新
  • 缺点是请求频繁会增加服务端压力,实时性取决于轮询间隔,存在延迟

注意:使用SSE和WebSocket方案时,部署必须选用支持长连接的ASGI服务器(如Uvicorn、Daphne),传统WSGI服务器的单同步worker会强制断开长连接,无法实现持续推送。

内容的提问来源于stack exchange,提问作者NorthernLights

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:39:02