国庆节10月1日
--


汉字谜盒项目结构、用 FileResponse 返回前端页面、用 StaticFiles 挂载静态资源目录

汉字谜盒是一款基于人工智能的字谜互动游戏:AI 随机出一道经典字谜(如”一箭穿心”),你根据谜面猜字,AI 判断对错、给提示,最后揭晓答案。
1汉字谜盒/2├── main.py # FastAPI 服务端(所有接口)3├── static/ # 前端静态资源(从课程资料拷贝)4│ ├── index.html # 页面结构5│ ├── app.js # 前端逻辑(调用后端接口)6│ └── style.css # 样式7└── sessions/ # 会话数据(每个会话一个 json 文件,程序自动创建)8 └── 2026-04-12_16-16-13.json搭建第一步:创建项目文件夹,把课程资料里的 static 目录整个拷贝过来。
1from fastapi import FastAPI2from fastapi.responses import FileResponse3from fastapi.staticfiles import StaticFiles4
5app = FastAPI(title="汉字谜盒")6
7# 挂载静态文件目录8app.mount("/static", StaticFiles(directory="static"), name="static")9
10# 访问 http://localhost:8000/ 时返回前端页面11@app.get("/")12def root():13 return FileResponse("static/index.html")| 参数 | 含义 |
|---|---|
"/static" | 挂载路径:任何以 /static 开头的请求都交给这里处理 |
StaticFiles(directory="static") | 真实目录:HTML、CSS、JS 等静态资源存放的地方 |
name="static" | FastAPI 内部使用的名称(可以自由定义) |
为什么要分成两个入口?
/ 返回的是页面(index.html),所以用 FileResponse 把文件内容直接返回/static/style.css、/static/app.js 这些请求交给 StaticFiles 处理
页面里引用资源时写的是 /static/xxx(绝对路径),这样静态资源就不会和接口路径打架。前端 app.js 里通过 fetch 调用后端接口,路径都以 /api 开头:
1// 获取会话列表2const response = await fetch(`${API_BASE_URL}/sessions`);3// 加载指定会话4const response = await fetch(`${API_BASE_URL}/sessions/${sessionId}`);5// 新建会话 / 删除会话 / 与 AI 交互同理| 前端请求 | 对应后端接口 |
|---|---|
GET /api/sessions | 获取会话列表 |
POST /api/sessions | 新建会话 |
GET /api/sessions/{id} | 加载指定会话 |
DELETE /api/sessions/{id} | 删除会话 |
POST /api/chat | 与 AI 交互 |
static/ 存放前端静态资源(HTML/CSS/JS),sessions/ 存放会话数据(json 文件)FileResponse 响应类:return FileResponse("static/index.html")app.mount("/static", StaticFiles(directory="static"), name="static")"/static" 是挂载路径,任何以它开头的请求都交给静态资源处理/static/style.css(以 / 开头),是为了避免和**接口(API)**路径冲突fetch 调用接口,本项目所有接口路径都以 /api 开头 2-1 搭一个能返回页面的服务
新建项目文件夹,写 main.py:挂载 static 目录,并让 / 返回 static/index.html。
一级 · 思路:一个入口返回页面,一个挂载点放静态资源
二级 · 方法:FileResponse / app.mount(...)
三级 · 骨架:app.mount("/____", StaticFiles(directory="____"), name="static")
1from fastapi import FastAPI2from fastapi.responses import FileResponse3from fastapi.staticfiles import StaticFiles4
5app = FastAPI(title="汉字谜盒")6
7# 2-1 挂载静态目录 + 首页返回页面8app.mount("/static", StaticFiles(directory="static"), name="static")9
10@app.get("/")11def root():12 return FileResponse("static/index.html") 2-2 验证页面能打开
写完后启动服务(fastapi dev main.py),在浏览器打开 http://127.0.0.1:8000/ 确认页面正常显示;再打开 /docs 看看自动生成的接口文档。
一级 · 思路:页面打不开通常是路径问题——先确认 static 是否在项目根目录
二级 · 方法:FileResponse("static/index.html") 里的路径是相对当前工作目录的
三级 · 骨架:用 TestClient 也能验证:client.get("/").status_code 应为 200
1# 在项目根目录下启动服务2fastapi dev main.py3
4# 浏览器打开 http://127.0.0.1:8000/ → 正常显示 static/index.html 页面5# 浏览器打开 http://127.0.0.1:8000/docs → FastAPI 自动生成的接口文档 2-3 用测试客户端检查静态资源
不启动服务器,用 FastAPI 自带的测试客户端分别请求 / 和 /static/style.css,打印状态码。
一级 · 思路:挂载点和页面入口都要能通
二级 · 方法:client.get("/static/style.css")
三级 · 骨架:两个都应返回 200
1# 2-3 验证(需在项目根目录下运行,且 static/ 里已有文件)2from fastapi.testclient import TestClient3
4if __name__ == "__main__":5 client = TestClient(app)6 print("首页:", client.get("/").status_code) # 2007 print("样式:", client.get("/static/style.css").status_code) # 200如果你喜欢,那么欢迎来到我的世界!
了解更多暂未播放



"生活不是等待暴风雨过去,而是学会在雨中跳舞。"—— 塞维涅夫人


