fastapi, 在一个网页模版上显示一个指定文件夹下所有文件的列表,并可以通过勾选的方式删除和下载
时间: 2024-09-06 18:02:20 浏览: 47
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,基于标准的 Python 类型提示,可以让你使用较少的代码就能享受到自动文档、数据验证、依赖注入等功能。
要在一个网页模板上显示指定文件夹下所有文件的列表,并且可以通过勾选的方式来删除和下载,你需要结合 FastAPI 和一些前端技术(如 HTML、JavaScript)以及可能的后端逻辑处理(如删除和下载文件)。以下是一个简单的概念性步骤说明:
1. 使用 FastAPI 创建基本的 Web 服务框架。
2. 设置路由来处理文件夹文件列表的展示,删除和下载文件的请求。
3. 使用 Jinja2 模板引擎(或任何你喜欢的模板引擎)来创建 HTML 模板。
4. 在 HTML 模板中,列出文件夹下的所有文件,并提供一个表单或按钮供用户勾选并执行操作。
5. 使用 JavaScript 或者其他前端技术与后端进行异步交互,处理用户的选择,并发送请求到后端的相应接口。
6. 后端接口根据前端传来的请求执行删除或下载文件的操作。
下面是一个简化的代码示例,仅供参考:
```python
from fastapi import FastAPI, HTTPException, Depends, BackgroundTasks
from fastapi.responses import HTMLResponse
from fastapi.staticfiles import StaticFiles
from starlette.background import BackgroundTask
from typing import List
import os
app = FastAPI()
# 用于存储文件的文件夹路径
FILES_DIRECTORY = "/path/to/your/files"
@app.get("/", response_class=HTMLResponse)
async def list_files():
# 获取文件夹内文件列表
files = os.listdir(FILES_DIRECTORY)
# 渲染 HTML 模板,并传递文件列表
return templates.TemplateResponse("files.html", {"request": request, "files": files})
@app.post("/delete")
async def delete_file(file_name: str):
# 构建完整的文件路径
file_path = os.path.join(FILES_DIRECTORY, file_name)
# 删除文件
if os.path.exists(file_path):
os.remove(file_path)
return {"message": f"File {file_name} deleted successfully."}
else:
raise HTTPException(status_code=404, detail="File not found")
@app.post("/download")
async def download_file(file_name: str):
# 构建完整的文件路径
file_path = os.path.join(FILES_DIRECTORY, file_name)
# 返回文件以供下载
if os.path.exists(file_path):
return FileResponse(path=file_path, filename=file_name)
else:
raise HTTPException(status_code=404, detail="File not found")
# 添加静态文件目录
app.mount("/static", StaticFiles(directory="path/to/static/files"), name="static")
# 加载模板
templates = Jinja2Templates(directory="path/to/templates")
# HTML 模板示例 "files.html"
# <html>
# <head>
# <title>Files List</title>
# </head>
# <body>
# <h1>Files List</h1>
# <form action="/delete" method="post">
# {% for file in files %}
# <input type="checkbox" name="file_name" value="{{ file }}"> {{ file }} <br>
# {% endfor %}
# <input type="submit" value="Delete Selected">
# </form>
# <form action="/download" method="post">
# {% for file in files %}
# <input type="checkbox" name="file_name" value="{{ file }}"> {{ file }} <br>
# {% endfor %}
# <input type="submit" value="Download Selected">
# </form>
# </body>
# </html>
```
请注意,这只是一个概念性的示例,你需要根据实际需求调整和完善代码,确保安全性和功能性。
阅读全文