python fastapi html 接受服务器的多维数组,然后以表格的形式显示在网页上,每一行设置一个复选框,网页上设置增加行,删除行,保存三个按钮,点击增加行,在页面表格追加一行,列宽同上一行
时间: 2024-10-04 18:00:59 浏览: 33
要在Python FastAPI项目中创建一个Web界面,展示多维数组并允许用户操作添加、删除行以及保存,你需要使用FastAPI作为后端API,Uvicorn作为HTTP服务器,再加上HTML模板(例如使用Jinja2)来渲染页面。以下是简化的步骤和代码片段:
首先安装必要的库:
```bash
pip install uvicorn fastapi jinja2
```
创建一个简单的FastAPI应用(`main.py`):
```python
from fastapi import FastAPI, File, UploadFile
from pydantic import BaseModel
import json
app = FastAPI()
# 假设从数据库或其他地方获取多维数组
def get_multi_dim_array():
# ... 实现查询多维数组的逻辑
return [[...], [...]] # 示例数据
@app.post("/data/")
async def upload_data(file: UploadFile):
data = await file.read()
# 将接收到的数据转换为JSON对象
array = json.loads(data)
return {"status": "success", "array": array}
@app.get("/display_table")
async def display_table(array: list):
template_variables = {
"array": array,
}
return {"template": render_template("index.html", **template_variables)}
# 使用Jinja2渲染HTML模板
def render_template(template_name, **context):
with open(f"templates/{template_name}", "r") as f:
return f.read().format(**context)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
```
创建一个HTML模板(`templates/index.html`):
```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>Table Editor</title>
<style>
/* 设置表单样式 */
</style>
</head>
<body>
<table id="data-table">
<thead>
<!-- 生成列头 -->
{% for row in array %}
{% for key, value in row.items() %}
<th>{{ key }}</th>
{% endfor %}
{% endfor %}
</thead>
<tbody>
{% for row in array %}
<tr>
{% for item in row %}
<td><input type="checkbox" name="{{ loop.index }}" value="{{ item }}">{{ item }}</td>
{% endfor %}
<td><button onclick="addRow()">Add Row</button></td>
<td><button onclick="deleteRow()">Delete Row</button></td>
<td><button onclick="save()">Save</button></td>
</tr>
{% endfor %}
</tbody>
</table>
<script>
// JavaScript 用于增加、删除行以及与后端交互
function addRow() {
// 添加新的行...
}
function deleteRow() {
// 删除当前行...
}
function save() {
// 通过POST请求将更改后的数据发送到/data/
fetch('/data/', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify([...array]) // 拷贝数组防止直接修改原数组
}).then(response => {
if (response.ok) {
alert('Data saved successfully!');
} else {
alert('Saving failed.');
}
});
}
</script>
</body>
</html>
```
请注意,这仅提供了一个基础的框架。在实际应用中,你还需要处理用户输入验证、错误处理、动态生成列头、列宽调整、以及与后端API的交互细节。此外,为了简化,上述JavaScript代码中的`addRow()`和`deleteRow()`函数并未实际实现,你需根据需求编写它们。
阅读全文