适用场景:刚接触 FastAPI,第一次运行
fastapi dev。
每个坑都是真实踩过的,按「现象 → 原因 → 改法」写,不废话。
📋 目录
- 1. 在 PyCharm 直接点运行按钮,什么都没发生
- 2.
fastapi dev命令报错RuntimeError: please install "fastapi[standard]" - 3. 文件路径有空格或中文,
fastapi dev找不到文件 - 4.
cd命令报too many arguments - 5.
ls看到的是虚拟环境目录,找不到自己的.py文件 - 6. 用浏览器地址栏访问 POST 接口,返回
Method Not Allowed
1. 在 PyCharm 直接点运行按钮,什么都没发生
❓ 错误现象
写好了main.py,点绿色三角形运行,终端只是显示Process finished,没有任何服务器启动日志。
🔍 原因分析
from fastapi import FastAPI; app = FastAPI()只定义了应用,没有启动服务器的代码。直接运行脚本会瞬间结束。
✅ 正确改法
方法一:在 Terminal 中运行(强烈推荐)
打开 PyCharm 底部Terminal,输入:
fastapi dev main.py
如图所示,即为成功
*
方法二:在代码末尾手动加启动代码(不推荐,会失去热重载)*
if__name__=="__main__":importuvicorn uvicorn.run(app)🎯 为什么不要用运行按钮?
fastapi dev自带热重载、自动文档等开发利器,而直接运行脚本只能得到最简单的单次执行结果。花 2 分钟熟悉 Terminal 操作,后面效率翻倍。
2.fastapi dev命令报错RuntimeError: please install "fastapi[standard]"
❓ 错误现象
输入fastapi dev main.py后提示:
To use the fastapi command, please install "fastapi[standard]"🔍 原因分析
只安装了fastapi轻量版,缺少开发服务器uvicorn和热重载依赖。
✅ 正确改法
在终端执行:
pipinstall"fastapi[standard]"安装完成后,重新运行fastapi dev main.py。
🎯 为什么需要
[standard]?fastapi本身极简,[standard]会额外安装uvicorn(ASGI 服务器)、watchfiles(热重载)、python-multipart(表单解析)等。一步到位,避免后续各种ModuleNotFoundError。
3. 文件路径有空格或中文,fastapi dev找不到文件
❓ 错误现象
终端显示:
Path does not exist FastAPI 第一ª接口.py或者直接报文件不存在。
🔍 原因分析
Windows 路径中包含空格、中文、逗号等特殊字符,Shell 解析出错。Git Bash 对中文显示也容易乱码。
✅ 正确改法
立即救急:用双引号括起来
fastapi dev"FastAPI第一个接口.py"一劳永逸:重命名文件,只用英文、数字、下划线
mv"FastAPI第一个接口.py"main.py fastapi dev main.py🎯 最佳实践
所有项目文件夹、文件名全部用英文 + 下划线,永远避免这类问题。这是每个程序员的必修课。
4.cd命令报too many arguments
❓ 错误现象
输入:
cdPydantic , Fastapi , Mysql报错:
bash: cd: too many arguments🔍 原因分析
Bash 把逗号和空格当成多个参数。cd只能接受一个路径参数。
✅ 正确改法
方法一:用双引号包裹整个带空格的目录名
cd"Pydantic, Fastapi, Mysql"方法二:转义每个特殊字符
cdPydantic\,\Fastapi\,\Mysql根本解决:目录名也避免中文、空格、逗号。
🎯 为什么会出现这种问题?
Windows 允许文件名包含空格,但 Linux / Git Bash 把空格当作参数分隔符。统一使用下划线_替代空格,就不会踩坑。
5.ls看到的是虚拟环境目录,找不到自己的.py文件
❓ 错误现象
在项目根目录执行ls -la,只看到.git、pyvenv.cfg、Lib、Scripts等,没有main.py。
🔍 原因分析
PyCharm 显示的项目结构包含虚拟环境目录,让你误以为代码也在根目录。实际代码在子文件夹(如Pydantic, Fastapi, Mysql)里。
✅ 正确改法
- 用
pwd确认当前位置。 - 用
find . -name "*.py"找到你的代码文件。 cd进到正确的子目录再启动服务器。- 推荐重构:在项目根目录新建一个干净的
code文件夹,把代码移过去,路径全英文。
🎯 如何彻底避免混淆?
在 PyCharm 中,右键项目根目录 →New→Directory,创建src或code。所有代码放在里面,虚拟环境永远在根目录的venv文件夹。这样ls一眼就能分清。
6. 用浏览器地址栏访问 POST 接口,返回Method Not Allowed
❓ 错误现象
写好了一个借书接口:
@app.post("/borrow")asyncdefborrow_book(borrow:BorrowRequest):return{"status":"success"}然后在浏览器地址栏输入http://127.0.0.1:8000/borrow,页面显示:
{"detail":"Method Not Allowed"}🔍 原因分析
- 浏览器地址栏访问默认发送的是GET请求。
- 你的接口用
@app.post定义,只允许 POST 方法。 - GET 请求不被允许 → 返回
405 Method Not Allowed。
✅ 正确改法
不要用浏览器地址栏测试 POST 接口。改用以下三种方式之一:
方法一:用 Swagger UI(强烈推荐)
1.访问http://127.0.0.1:8000/docs。
2. 找到POST /borrow接口并点击。
3. 点击Try it out。
4. 在 Request body 里填入合法 JSON,例如:
{"user_id":1,"book_id":2,"days":7}5.点击Execute,下方会显示返回结果。
方法二:用 curl 命令(终端)
curl-XPOST http://127.0.0.1:8000/borrow\-H"Content-Type: application/json"\-d'{"user_id": 1, "book_id": 2, "days": 7}'方法三:用 PyCharm 自带的 HTTP Client
1.在项目中新建test.http文件。
2. 写入:
POST http://127.0.0.1:8000/borrow Content-Type: application/json { "user_id": 1, "book_id": 2, "days": 7 }4.点击每行旁边的绿色箭头执行。
🎯 为什么 POST 接口不能用浏览器地址栏测试?
浏览器地址栏只发送 GET 请求,用来获取数据。POST 请求会修改服务器状态(如创建订单、提交表单),浏览器需要专门的表单页面或 AJAX 才能发送。Swagger UI 是你开发阶段最好的朋友,它会自动识别接口的 HTTP 方法并提供友好的输入界面。
🎯 极简操作路线图(新手必读)
按照以下顺序操作,100% 顺畅跑起第一个 FastAPI 接口:
- 安装 FastAPI 全家桶:
pip install "fastapi[standard]" - 创建
main.py,路径全英文,不要有空格。 - 在 PyCharm Terminal 中运行:
fastapi dev main.py - 测试 GET 接口:浏览器访问
http://127.0.0.1:8000和http://127.0.0.1:8000/books - 测试 POST 接口:打开
http://127.0.0.1:8000/docs,用 Swagger UI 执行 - 遇到错误:对照上面的 6 个坑,看看属于哪一种。
📊 常见错误速查表
| 错误现象 | 解决方法 |
|---|---|
| 点运行按钮没有日志 | 改用fastapi dev main.py在 Terminal 运行 |
fastapi dev提示需要[standard] | 执行pip install "fastapi[standard]" |
| 找不到文件 / 路径乱码 | 文件重命名为英文,或用双引号括起来 |
cd报too many arguments | 用双引号包裹目录名,或改用下划线命名目录 |
ls看不到自己的.py文件 | 用find找到代码位置,cd进去,或重构目录结构 |
浏览器访问 POST 接口返回Method Not Allowed | 改用 Swagger UI / curl / HTTP Client 测试 |
🎉 恭喜你!
避过这 6 个坑,你就已经掌握了 FastAPI 开发的起手式,加油兄弟们。