FastAPI 入门:Python 后端开发新手也能轻松上手
大家好,我是你们的老朋友,一名在大厂干了三年后端开发的工程师,业余时间也在 B 站做技术分享。最近收到不少私信,问能不能出一期 零基础学 FastAPI 的教程。说实话,我当初学后端开发的时候,也是一头雾水——不知道从哪开始、看不懂文档、连“API”是啥都搞不清楚。
所以今天,我就用最通俗的语言、最实用的代码示例,带大家从零开始搭建一个真正的 FastAPI 项目。无论你是学生、转行者,还是只会写点 Python 脚本的小白,只要跟着做,你就能跑起自己的第一个 Web 接口!
为什么选择 FastAPI?
FastAPI 是一个用 Python 编写的现代、快速(高性能)的 Web 框架,专门用来构建 API(应用程序接口)。你可以把它理解成“让 Python 能对外提供网络服务”的工具。
和其他框架(比如 Flask、Django)相比,FastAPI 有三大优势:
- 超快:性能接近 Node.js 和 Go,比 Flask 快很多。
- 自动生成文档:写完代码,自动就有漂亮的交互式 API 文档(Swagger UI)。
- 类型提示友好:用 Python 的
typing模块,代码更清晰、错误更少。
我当初第一次看到自动生成的文档页面时,惊呆了——不用写一行前端代码,就能测试接口!这对新手太友好了。
第一步:搭建开发环境(5 分钟搞定)
别被“环境配置”吓到,其实就三步:
1. 安装 Python(3.7+)
确保你的电脑有 Python。打开终端(Windows 用 CMD 或 PowerShell,Mac/Linux 用 Terminal),输入:
python --version
# 或
python3 --version
如果显示 Python 3.7 以上,说明 OK。如果没有,请去 python.org 下载安装。
💡 小贴士:安装时记得勾选 “Add to PATH”,否则后面会报错找不到命令。
2. 创建虚拟环境(推荐)
虚拟环境能隔离项目依赖,避免不同项目“打架”。执行:
# 创建名为 fastapi-env 的虚拟环境
python -m venv fastapi-env
# 激活虚拟环境
# Windows:
fastapi-env\Scripts\activate
# Mac/Linux:
source fastapi-env/bin/activate
激活后,命令行前面会多出 (fastapi-env) 字样。
3. 安装 FastAPI 和 Uvicorn
FastAPI 本身不包含服务器,需要搭配 ASGI 服务器(如 Uvicorn)运行:
pip install fastapi uvicorn[standard]
✅ 验证是否成功:如果没报错,说明安装完成!
第二步:第一个 FastAPI 程序
新建一个文件 main.py,写入以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "Hello, FastAPI!"}
然后在终端运行:
uvicorn main:app --reload
你会看到类似这样的输出:
INFO: Uvicorn running on http://127.0.0.1:8000
INFO: Started reloader process [xxxx]
打开浏览器,访问 http://127.0.0.1:8000,就能看到:
{"message": "Hello, FastAPI!"}
🎉 恭喜!你已经写出了第一个 API!
🔍 解释一下代码:
FastAPI()创建应用实例@app.get("/")是一个“路由装饰器”,表示当用户访问根路径/时,调用下面的函数--reload参数表示代码修改后自动重启服务(开发时超方便!)
第三步:理解核心概念(用大白话讲)
什么是 API?
API(Application Programming Interface)就是“程序之间的对话方式”。比如你的手机 App 要从服务器拿数据,它就通过 API 发请求,服务器返回 JSON 数据。
路由(Route)和端点(Endpoint)
- 路由:URL 路径,比如
/users、/items/123 - 端点:处理该路径的函数,比如
get_user()、create_item()
请求方法(HTTP Methods)
常见的有:
GET:获取数据(如查看文章)POST:创建数据(如注册用户)PUT/PATCH:更新数据DELETE:删除数据
FastAPI 用装饰器对应这些方法:
@app.get("/read")
@app.post("/create")
@app.put("/update")
@app.delete("/delete")
第四步:动手做一个“待办事项”小项目
光看不动手等于没学!我们来做一个简单的 Todo 列表 API。
功能需求
- 查看所有待办事项(GET)
- 添加新待办事项(POST)
- 根据 ID 查看某一项(GET)
- 删除某一项(DELETE)
步骤 1:定义数据模型
FastAPI 推荐用 Pydantic 定义数据结构。修改 main.py:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List
app = FastAPI()
# 定义 Todo 项的数据结构
class TodoItem(BaseModel):
id: int
title: str
completed: bool = False
# 模拟数据库(实际项目用数据库,这里先用列表)
todos = [
TodoItem(id=1, title="学习 FastAPI", completed=False),
TodoItem(id=2, title="写一篇技术分享", completed=True)
]
步骤 2:实现 API 接口
继续在 main.py 中添加:
# 获取所有 todos
@app.get("/todos", response_model=List[TodoItem])
def get_todos():
return todos
# 根据 ID 获取单个 todo
@app.get("/todos/{todo_id}", response_model=TodoItem)
def get_todo(todo_id: int):
for todo in todos:
if todo.id == todo_id:
return todo
raise HTTPException(status_code=404, detail="Todo not found")
# 创建新 todo
@app.post("/todos", response_model=TodoItem)
def create_todo(todo: TodoItem):
# 检查 ID 是否重复
for t in todos:
if t.id == todo.id:
raise HTTPException(status_code=400, detail="ID already exists")
todos.append(todo)
return todo
# 删除 todo
@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: int):
for i, todo in enumerate(todos):
if todo.id == todo_id:
todos.pop(i)
return {"message": "Deleted successfully"}
raise HTTPException(status_code=404, detail="Todo not found")
步骤 3:测试你的 API
重新运行:
uvicorn main:app --reload
然后访问 http://127.0.0.1:8000/docs —— 看!自动生成的交互式文档出现了!
你可以直接在网页上:
- 点击
GET /todos→ 点 “Try it out” → Execute,看到所有待办事项 - 点击
POST /todos→ 输入 JSON(如{"id": 3, "title": "喝杯咖啡"})→ Execute,添加新任务
💡 这就是 FastAPI 的魅力:不用 Postman,不用写前端,直接在浏览器里调试!
新手常见问题 & 避坑指南
❓ 问题 1:为什么我的代码改了但页面没更新?
✅ 检查是否加了 --reload 参数。没有它,Uvicorn 不会监听文件变化。
❓ 问题 2:报错 ModuleNotFoundError: No module named 'fastapi'
✅ 原因:没在虚拟环境中安装,或者没激活虚拟环境。
解决:重新激活虚拟环境,再 pip install fastapi uvicorn。
❓ 问题 3:POST 请求怎么传 JSON?
✅ 在 Swagger UI(/docs)里,点击 “Try it out”,会弹出 JSON 输入框。
或者用 curl 测试:
curl -X POST "http://127.0.0.1:8000/todos" \
-H "Content-Type: application/json" \
-d '{"id": 4, "title": "睡觉"}'
❓ 问题 4:如何处理路径参数和查询参数?
- 路径参数:
/todos/{todo_id}→ 函数参数todo_id: int - 查询参数:
/search?q=fastapi→ 函数参数q: str = None
示例:
@app.get("/search")
def search(q: str = None, limit: int = 10):
return {"query": q, "limit": limit}
访问 /search?q=python&limit=5 即可。
下一步学什么?我的学习建议
FastAPI 只是后端开发的起点。如果你想深入,我建议按这个路径走:
| 阶段 | 学习内容 | 推荐资源 |
|---|---|---|
| 基础巩固 | 异步编程(async/await)、Pydantic 高级用法 | FastAPI 官方文档 |
| 数据库 | SQLAlchemy + PostgreSQL / MySQL | 《FastAPI and SQLAlchemy》教程 |
| 认证授权 | JWT、OAuth2 | FastAPI 安全章节 |
| 部署上线 | Docker、Nginx、云服务器(如阿里云) | 我的 B 站部署实战视频 |
📌 我的经验:不要一上来就学“高并发”“微服务”,先把 CRUD(增删改查)玩熟,再逐步扩展。
结语:技术分享的意义
写这篇教程,是因为我相信:好的技术不应该被复杂的术语挡住。FastAPI 降低了后端开发的门槛,让像你我这样的普通人也能快速做出有用的东西。
我当初学的时候,也是从一行 print("Hello World") 开始的。现在,我已经能用 FastAPI 构建百万用户量级的服务。你也可以。
动手写代码,永远比只看教程有效十倍。
现在,关掉这篇文章,打开你的编辑器,敲下那几行代码吧。你的第一个 API,正在等你唤醒。
作者:B站技术UP主 | 大厂后端工程师
本文为原创技术分享,欢迎转发,转载请注明出处。
如果你觉得有帮助,欢迎关注我的 B 站账号,我会持续更新 Python 后端实战系列!

评论 0