一、FastAPI 是什么
在 Python 的世界里,做网站后台(Web 开发)主要有三巨头:
- Django:老大哥,功能全但笨重,像一辆重型卡车。
- Flask:二哥,轻便灵活但插件多,像一辆自行组装的赛车。
- FastAPI:新晋顶流,快、自动生成文档、代码查错,像一辆自动驾驶的特斯拉。
FastAPI 是现代 Python Web 框架,支持自动文档生成与类型检查。本文介绍环境搭建、基础路由定义、路径与查询参数处理,以及使用 Pydantic 进行数据模型验证。通过示例代码展示如何创建应用、启动服务及接收不同类型的数据,帮助开发者快速构建高性能 API 接口。

在 Python 的世界里,做网站后台(Web 开发)主要有三巨头:
- Django:老大哥,功能全但笨重,像一辆重型卡车。
- Flask:二哥,轻便灵活但插件多,像一辆自行组装的赛车。
- FastAPI:新晋顶流,快、自动生成文档、代码查错,像一辆自动驾驶的特斯拉。
为什么新手首选 FastAPI?
FastAPI 依赖 Python 3.8 及更高版本。第一步是下载 FastAPI 模块。
pip install fastapi -i https://mirrors.aliyun.com/pypi/simple/
-i https://mirrors.aliyun.com/pypi/simple/ 使用了国内镜像,加快下载速度。
第二步需要安装一个 ASGI 服务器,生产环境可以使用 Uvicorn 或者 Hypercorn。
pip install "uvicorn[standard]" -i https://mirrors.aliyun.com/pypi/simple/
新建一个 main.py 文件,写入最简单的代码:
from fastapi import FastAPI
import uvicorn
# 1. 创建应用实例
app = FastAPI()
# 2. 定义路由
@app.get("/")
def root():
return {"message": "Hello World"}
# 3. 启动入口
if __name__ == "__main__":
uvicorn.run(app="main:app", host="127.0.0.1", port=8000)
这里的 main:app 意思是:运行 main.py 文件里的 app 对象。
启动服务的方式有 2 个:
if __name__ == "__main__": 语句直接运行启动。uvicorn main:app
启动后访问 http://127.0.0.1:8000,你会看到返回的 JSON 数据。
这是 FastAPI 最让其他语言开发者羡慕的功能。因为你不需要写任何一行文档代码,FastAPI 已经帮你写好了。
打开浏览器,访问:http://127.0.0.1:8000/docs
你会看到一个 Swagger UI 界面。这是 FastAPI 根据你的代码自动生成的接口文档。
以前:写完接口 -> 打开 Postman -> 填 URL -> 填参数 -> 发送 -> 报错 -> 改代码...
现在:直接在网页上点击 Try it out,填参数,执行。
做后端最主要的工作就是:接收前端的数据 -> 处理数据 -> 返回结果。FastAPI 接收数据主要有两种方式,新手必须掌握。
场景:你要查询 ID 为 5 的学生信息,网址通常是 http://.../student/5。
代码这样写:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/student/{student_id}")
def get_student(student_id: int):
return {
"学生 ID": student_id,
"类型": str(type(student_id))
}
if __name__ == "__main__":
uvicorn.run(app="main:app", host="127.0.0.1", port=8088)
新手看细节:我在函数参数里写了 student_id: int。如果你访问 /student/5,FastAPI 会自动把 5 转换成整数;如果你访问 /student/abc,FastAPI 会直接给你报错,提示你'我们要的是整数,你给的是字符串'。这就是类型检查的强大之处!
场景:类似百度的搜索,网址是 http://.../search?keyword=python&page=1。
在 FastAPI 里,只要函数参数里写的变量,没在路径里出现,就是查询参数。
from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/search")
def search_data(keyword: str, page: int = 1):
return {
"你搜的词": keyword,
"当前页码": page
}
if __name__ == "__main__":
uvicorn.run(app="main:app", host="127.0.0.1", port=8088)
访问 /search?keyword=apple 返回 keyword=apple, page=1 (默认值)。
访问 /search?keyword=apple&page=5 返回 keyword=apple, page=5。
如果你要做注册功能,前端会发来一堆数据(用户名、密码、年龄...)。如果参数太多,一个一个写在函数里太乱了。FastAPI 引入了 Pydantic 来定义数据的'形状'。
from fastapi import FastAPI
import uvicorn
from pydantic import BaseModel
app = FastAPI()
# 1. 导入 BaseModel
# 2. 定义一个类,继承 BaseModel
# 这就像是制定一个'表格',前端传来的数据必须符合这个表格
class UserInfo(BaseModel):
username: str
password: str
age: int = 18
is_student: bool = True
# 3. 在接口中使用这个模型
@app.post("/register")
def register(user: UserInfo):
if user.age < 18:
return {"message": "未成年人禁止注册", "code": 400}
return {
"message": "注册成功",
"用户": user.username,
"身份": "学生" if user.is_student else "社会人"
}
if __name__ == "__main__":
uvicorn.run(app="main:app", host="127.0.0.1", port=8088)
怎么测试这个 POST 接口?
/docs 文档页面。/register 接口。Try it out。Execute。你完全不用写解析 JSON 的代码,FastAPI 全部帮你做好了!
对于新手来说,掌握以上内容,你已经算是一个合格的 FastAPI 入门者了。
回顾一下今天学到的:
pip install fastapi。uvicorn 是启动引擎。/docs 自动生成文档,是测试神器。int, str)来约束参数。BaseModel 来处理复杂的 POST 数据(如注册登录)。FastAPI 不仅让你写代码变快,更让你写出规范、健壮的代码。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online