FastAPI入门:零基础也能写出专业级Python后端
大家好,我是阿哲,一个在大厂干了三年后端开发的程序员,平时也在B站分享技术干货。最近收到很多私信问我:“有没有适合完全零基础的FastAPI教程?”说实话,我当初学的时候也踩过不少坑——文档太专业、示例太复杂、环境配置就卡住半天……所以今天这篇教程,就是专门为你写的:不用懂任何后端知识,只要会写一点点Python,就能跟着做出一个真正的API服务。
更重要的是,我会把面试常问的“FastAPI vs Flask vs Django”这类问题融入实战中,还会教你如何用GitHub Copilot加速开发。别担心,咱们一步步来!
为什么选FastAPI?它到底是什么?
简单说:FastAPI是一个用Python写的现代Web框架,专门用来快速构建高性能的后端API(接口)。
想象一下,你做的网页或手机App需要从服务器获取数据(比如用户信息、商品列表),这些数据不是凭空变出来的,而是通过“接口”请求来的。FastAPI就是帮你轻松写出这些接口的工具。
它有什么优势?
| 特性 | 说明 | 对新手友好吗? |
|---|---|---|
| 自动文档 | 写完代码,自动生成交互式API文档(Swagger UI) | ✅ 超友好!不用额外写文档 |
| 类型提示 | 基于Python的类型注解,自动校验请求参数 | ✅ 减少Bug,提前发现错误 |
| 高性能 | 比Flask快很多,接近Go语言的性能 | ⚠️ 性能好,但新手不用深究 |
| 异步支持 | 天然支持async/await,处理高并发更轻松 | ✅ 先会用就行,原理以后再学 |
💡 面试题挑战:面试官常问:“FastAPI和Flask有什么区别?”
简单答:FastAPI更现代、自带类型校验和文档、性能更高;Flask更轻量、学习曲线平缓。如果你要做API服务(尤其是前后端分离项目),FastAPI是更好的选择。
环境准备:5分钟搞定开发环境
第一步:安装Python(3.7+)
如果你还没装Python,请去 python.org 下载最新版(推荐3.10+)。安装时记得勾选 “Add to PATH”!
验证是否成功:
python --version
# 或
python3 --version
第二步:创建虚拟环境(强烈推荐!)
虚拟环境能隔离项目依赖,避免不同项目之间的包冲突。
# 创建虚拟环境(名字叫fastapi-env)
python -m venv fastapi-env
# 激活虚拟环境
# Windows:
fastapi-env\Scripts\activate
# macOS/Linux:
source fastapi-env/bin/activate
激活后,命令行前面会出现 (fastapi-env),说明成功了!
第三步:安装FastAPI和Uvicorn
FastAPI本身不包含服务器,我们需要一个ASGI服务器来运行它,Uvicorn 是最常用的选择。
pip install fastapi uvicorn
🚀 小技巧:如果你装了 GitHub Copilot(VS Code插件),写代码时它会自动提示FastAPI的用法!比如输入
from fastapi import,Copilot会建议你导入FastAPI, Request, Response等常用模块,超省心。
核心概念:3个关键词搞懂FastAPI
1. FastAPI() —— 应用的“大脑”
这是整个API服务的入口。所有路由(URL规则)都注册在这里。
from fastapi import FastAPI
app = FastAPI() # 创建应用实例
2. 路由装饰器 —— 把URL和函数连起来
比如你想让访问 /hello 时返回“你好”,就这么写:
@app.get("/hello") # 当GET请求 /hello 时,执行下面的函数
def say_hello():
return {"message": "你好,世界!"}
常见的HTTP方法:
@app.get()→ 获取数据(如查询用户)@app.post()→ 创建数据(如注册用户)@app.put()→ 更新数据@app.delete()→ 删除数据
3. 自动文档 —— 写完就有可视化界面
启动服务后,访问:
http://127.0.0.1:8000/docs→ Swagger UI(交互式文档)http://127.0.0.1:8000/redoc→ ReDoc风格文档
不用写一行文档代码,所有接口自动展示,还能在线测试!这是我当初最惊艳的功能。
实战项目:做一个“待办事项”API
现在,我们动手做一个简单的Todo List API,包含:
- 查看所有任务
- 添加新任务
- 标记任务完成
第一步:创建项目文件
新建一个文件 main.py,内容如下:
from fastapi import FastAPI
app = FastAPI()
# 模拟数据库(实际项目用SQLite或PostgreSQL)
todos = [
{"id": 1, "title": "学习FastAPI", "completed": False},
{"id": 2, "title": "写第一个API", "completed": True}
]
@app.get("/")
def root():
return {"message": "欢迎使用Todo API!"}
@app.get("/todos")
def get_todos():
return todos
第二步:运行服务
在终端执行:
uvicorn main:app --reload
main:app表示从main.py文件中加载app对象--reload表示代码修改后自动重启(开发时必备!)
看到类似输出就成功了:
INFO: Uvicorn running on http://127.0.0.1:8000
第三步:测试接口
打开浏览器,访问 http://127.0.0.1:8000/todos,你会看到JSON格式的任务列表。
再访问 http://127.0.0.1:8000/docs,点击“Try it out” → “Execute”,就能直接在网页上测试接口!
第四步:添加“创建任务”功能
我们需要接收前端发来的数据。FastAPI用 Pydantic模型 来定义数据结构并自动校验。
先安装Pydantic(其实已随FastAPI安装,但显式说明更清楚):
# 已包含,无需重复安装
修改 main.py:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class TodoCreate(BaseModel): # 定义传入的数据格式
title: str
todos = [{"id": 1, "title": "学习FastAPI", "completed": False}]
@app.post("/todos")
def create_todo(todo: TodoCreate):
new_id = max(t["id"] for t in todos) + 1 if todos else 1
new_todo = {"id": new_id, "title": todo.title, "completed": False}
todos.append(new_todo)
return new_todo
现在,在Swagger文档里测试 /todos 的POST接口,输入:
{"title": "部署到服务器"}
点击“Execute”,就会看到新任务被添加!
💡 避坑指南:新手常犯的错是忘记导入
BaseModel,或者把字段名拼错。GitHub Copilot这时候特别有用——当你写class TodoCreate(BaseModel):,它会自动提示你加字段,比如title: str。
第五步:标记任务完成
再加一个PUT接口:
@app.put("/todos/{todo_id}")
def complete_todo(todo_id: int):
for todo in todos:
if todo["id"] == todo_id:
todo["completed"] = True
return todo
return {"error": "任务未找到"}
注意 {todo_id} 是路径参数,FastAPI会自动把它转成int类型!
常见问题解答(新手必看!)
Q1:为什么我访问不了 http://127.0.0.1:8000?
- 检查终端是否还在运行
uvicorn命令 - 确保没改端口号(默认8000)
- 如果公司网络限制,可尝试
--host 0.0.0.0让外网也能访问(仅测试用!)
Q2:报错 ModuleNotFoundError: No module named 'fastapi'?
你很可能没激活虚拟环境!重新执行:
# Windows
fastapi-env\Scripts\activate
# macOS/Linux
source fastapi-env/bin/activate
然后再运行 uvicorn。
Q3:如何处理数据库?
本教程用列表模拟数据库,实际项目推荐:
- 小项目:SQLite + SQLAlchemy
- 中大型:PostgreSQL + asyncpg
但初学者先别碰数据库!先把API逻辑搞清楚,后面再集成。
Q4:FastAPI能替代Go做后端吗?
性能上,Go确实更快,但FastAPI在Python生态中已是顶尖水平(基于Starlette + Pydantic)。对大多数业务场景,FastAPI完全够用。而且Python开发效率远高于Go,适合快速迭代。
📌 面试加分点:如果面试官问“为什么不用Go?”,你可以答:“FastAPI在保证高性能的同时,大幅提升了开发效率,尤其适合MVP(最小可行产品)阶段。等业务量级达到一定规模,再考虑用Go重构核心模块。”
学习建议:下一步怎么走?
你已经完成了第一个FastAPI项目!接下来可以:
1. 深入核心功能
- 学习 依赖注入(Dependency Injection):管理数据库连接、用户认证等
- 掌握 中间件(Middleware):记录日志、处理CORS跨域
- 使用 异步(async/await):提升I/O密集型任务性能
2. 集成真实数据库
推荐教程顺序:
- 用 SQLAlchemy ORM 连接SQLite(同步)
- 升级到 SQLModel(FastAPI作者开发,结合Pydantic + SQLAlchemy)
- 尝试 Tortoise ORM(原生支持异步)
3. 部署上线
- 开发环境:继续用
uvicorn - 生产环境:用
gunicorn + uvicorn workers - 云服务:Vercel、Render、Fly.io 都支持一键部署FastAPI
4. 刷面试题
重点准备:
- FastAPI的生命周期(startup/shutdown事件)
- 如何做用户认证(JWT + OAuth2)
- 错误处理(自定义异常处理器)
结语
FastAPI是我近年用过最“爽”的Python框架——写得快、跑得快、文档自动生成,还特别适合新手入门。你不需要一开始就懂异步、ORM、Docker,先做出能跑的东西,兴趣才是最好的老师。
我在B站更新了配套视频(搜索“阿哲 FastAPI零基础”),手把手演示每一步操作。代码也已上传GitHub,欢迎Star:github.com/azhe/fastapi-todo-demo
最后送你一句我常说的话:“每个大神,都是从‘Hello World’开始的。” 现在,你的第一个API已经跑起来了,接下来,就是星辰大海!
有问题欢迎评论区留言,我会一一回复。下期想看什么?留言告诉我!

评论 0