python fastapi 构建一个html文件,请求时,列表显示服务端发来的文件夹下文件清单,并提供点击删除功能,删除后页面被删除的文件自动消失
时间: 2024-09-20 14:05:47 浏览: 30
在Python中,你可以使用FastAPI框架结合HTML模板来构建一个web应用,展示服务器文件夹内容并提供删除功能。首先,你需要安装必要的库,如`fastapi`, `uvicorn`, 和`jinja2`用于处理HTML渲染。下面是一个简单的步骤指南:
1. 安装依赖:
```bash
pip install fastapi uvicorn jinja2 html-template-loader
```
2. 创建FastAPI应用程序并设置路由:
```python
from fastapi import FastAPI, File, UploadFile
from starlette.responses import HTMLResponse
import os
app = FastAPI()
@app.get("/files/")
async def get_files(dir_path="/path/to/your/folder"):
files = [f for f in os.listdir(dir_path) if not f.startswith('.')]
return {"files": files}
@app.post("/delete/{file_name}")
async def delete_file(file_name: str):
try:
os.remove(os.path.join(dir_path, file_name))
# 更新响应时删除文件,可以使用HTML模板的条件渲染
return HTMLResponse("<h1>File deleted</h1>")
except FileNotFoundError:
return "File not found."
```
3. 使用Jinja2模板创建HTML页面:
创建一个名为`templates`的文件夹,然后在其中创建一个`index.html`模板文件:
```html
<!-- templates/index.html -->
<html>
<body>
<ul id="file-list">
{% for file in files %}
<li>
{{ file }}
<button onclick="deleteFile('{{ file }}')">Delete</button>
</li>
{% endfor %}
</ul>
<script>
function deleteFile(fileName) {
fetch(`/delete/${fileName}`, {method: 'DELETE'})
.then(() => location.reload());
}
</script>
</body>
</html>
```
这里假设你已经设置了`dir_path`变量为实际的文件夹路径。
4. 启动FastAPI服务:
```bash
uvicorn your_app_name:app --reload
```
现在,当你访问`http://localhost:8000/files/`时,会看到文件列表;点击删除按钮后,对应的文件会被删除,页面会刷新以反映变化。请注意,这个示例简化了错误处理和安全性,生产环境中需要更全面的验证和权限控制。