from fastapi import FastAPI, Request from fastapi.staticfiles import StaticFiles from fastapi.templating import Jinja2Templates from router import router # 1. 创建 FastAPI 应用实例 app = FastAPI( title="Annotation Tool API", description="从 CherryPy 转换而来的标注工具 API", version="2.0.0" ) # 2. 设置 Jinja2 模板 # CherryPy 的 FileSystemLoader('./') 对应 FastAPI 的 directory="." templates = Jinja2Templates(directory=".") # 3. 挂载静态文件 (对应 server.conf) # app.mount("路径", StaticFiles(directory="本地目录"), name="唯一名称") app.mount("/static", StaticFiles(directory="public"), name="public") # app.mount("/data", StaticFiles(directory="data"), name="data") app.mount("/temp", StaticFiles(directory="temp"), name="temp") app.mount("/views", StaticFiles(directory="views"), name="views") app.mount("/assets", StaticFiles(directory="assets"), name="assets") # --- HTML 页面路由 --- @app.get("/icon") def icon(request: Request): """渲染测试图标页""" return templates.TemplateResponse("test_icon.html", {"request": request}) @app.get("/ml") def ml(request: Request): """渲染测试 ML 页""" return templates.TemplateResponse("test_ml.html", {"request": request}) @app.get("/reg") def reg(request: Request): """渲染注册演示页""" return templates.TemplateResponse("registration_demo.html", {"request": request}) @app.get("/view/{file_path:path}") def view(request: Request, file_path: str): """渲染查看页,:path 允许路径中包含斜杠""" # 原始代码没有使用 file 参数,这里保持一致 return templates.TemplateResponse("view.html", {"request": request}) # --- API 接口路由 --- @app.get("/") def index(request: Request, scene: str = "", frame: str = ""): """渲染主页""" return templates.TemplateResponse("index.html", {"request": request}) app.include_router(router) # 6. 启动服务器 (对应 if __name__ == '__main__') # 在命令行运行: uvicorn main:app --host 0.0.0.0 --port 8081 --reload if __name__ == "__main__": import uvicorn print("Starting FastAPI server...") # server.conf 中的 host 和 port 在这里配置 uvicorn.run( app, host="0.0.0.0", port=8081 )