fastapi 构建服务端,一个html页面模版,页面点击上传文件向服务端上传文件,服务端检查sesion是否存在,如存在打开一个新的网页预览内容,点击确认或者放弃后返回原来页面,包括htmll模版
时间: 2024-09-13 09:04:57 浏览: 42
FastAPI 是一个现代、快速的(高性能)Web 框架,用于构建 API。使用 FastAPI,你可以构建简单的文件上传服务,并且可以通过模板引擎(例如 Jinja2)渲染 HTML 页面。下面是一个简单的例子,展示了如何使用 FastAPI 创建一个服务端,接收文件上传,并根据 session 状态处理上传结果。
首先,确保你安装了 FastAPI 和 Uvicorn(用于运行 FastAPI 应用):
```bash
pip install fastapi uvicorn
```
然后,创建一个简单的 FastAPI 应用和 HTML 模板:
```python
# main.py
from fastapi import FastAPI, Request, Form, File, UploadFile
from fastapi.templating import Jinja2Templates
from fastapi.responses import HTMLResponse
from starlette.responses import RedirectResponse
app = FastAPI()
templates = Jinja2Templates(directory="templates")
@app.get("/", response_class=HTMLResponse)
async def form_page(request: Request):
return templates.TemplateResponse("upload.html", {"request": request})
@app.post("/upload")
async def upload_file(file: UploadFile = File(...), session: str = Form(...)):
# 这里假设 session 是一个字符串,实际应用中可以根据需求设计 session 的获取方式
if session:
# 文件上传成功,可以在这里处理文件(例如保存到磁盘)
# ...
# 返回新的页面 URL,这里用 "preview" 作为示例
return RedirectResponse(url="/preview")
else:
# session 不存在或有其他处理逻辑
# 返回到上传页面
return {"message": "Session error or not provided"}
@app.get("/preview")
async def preview():
# 返回预览页面
return templates.TemplateResponse("preview.html", {})
# 你的 HTML 模板应该放在 "templates" 文件夹下
```
接下来,创建 HTML 模板文件 `upload.html` 和 `preview.html`:
```html
<!-- templates/upload.html -->
<!DOCTYPE html>
<html>
<head>
<title>文件上传</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" accept="*">
<input type="text" name="session">
<input type="submit" value="上传">
</form>
</body>
</html>
```
```html
<!-- templates/preview.html -->
<!DOCTYPE html>
<html>
<head>
<title>文件预览</title>
</head>
<body>
<p>文件预览内容...</p>
<a href="/">确认</a> 或 <a href="/">放弃</a>
</body>
</html>
```
现在,你可以通过 Uvicorn 运行你的 FastAPI 应用:
```bash
uvicorn main:app --reload
```
服务运行后,你可以通过浏览器访问 `http://127.0.0.1:8000` 来查看上传页面。
阅读全文