fastapi 将一组动态数据定时推送给html编写的页面,页面接收并动态显示,不使用页面更新功
时间: 2024-09-14 18:11:10 浏览: 130
FastAPI后端查询数据在前端进行分页展示(html、py文件)
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API。它可以用于将动态数据推送给前端页面。要实现定时推送数据并让 HTML 页面动态显示,不使用页面更新(例如轮询),可以使用 WebSockets 或 Server-Sent Events (SSE) 技术。
这里以 Server-Sent Events (SSE) 为例进行说明:
1. 后端使用 FastAPI 创建一个可以发送事件的 SSE 端点。
2. 客户端 HTML 页面连接到该端点,并保持一个开放的 HTTP 连接。
3. 每当有新数据可用时,后端就会通过 SSE 发送消息到客户端。
4. 客户端接收到消息后,可以使用 JavaScript 处理这些消息,并动态更新页面内容。
FastAPI 端点示例代码:
```python
from fastapi import FastAPI, Response, HTTPException
from starlette.responses import StreamingResponse
import asyncio
app = FastAPI()
async def event_stream():
while True:
# 假设这里有一个定时获取数据的过程
data = yield "data: " + "新的数据内容\n\n"
await asyncio.sleep(10) # 每10秒发送一次数据
@app.get("/events")
async def get_events():
return StreamingResponse(event_stream(), media_type="text/event-stream")
```
HTML 页面使用 JavaScript 连接到 SSE 端点,并接收数据:
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>动态数据推送示例</title>
<script>
if (typeof(EventSource) !== "undefined") {
// 创建新的EventSource实例
var source = new EventSource("/events");
source.onmessage = function(event) {
// 当收到新数据时执行的代码
var data = event.data;
// 更新页面内容
document.getElementById("data").innerHTML += data + "<br>";
};
} else {
// 浏览器不支持EventSource
document.getElementById("data").innerHTML = "您的浏览器不支持SSE。";
}
</script>
</head>
<body>
<h1>动态数据展示</h1>
<div id="data"></div>
</body>
</html>
```
在这个例子中,后端使用 FastAPI 创建了一个 `/events` 的 SSE 端点,客户端的 HTML 页面通过 JavaScript 中的 `EventSource` 对象连接到该端点,并在接收到数据时动态更新页面内容。
阅读全文