FastAPI真香!零基础也能写出高性能Python后端
大家好,我是你们的老朋友,一个在大厂搬砖三年、业余时间在B站分享技术的UP主。最近收到不少私信问我:“有没有比Flask更现代的Python Web框架?”、“听说FastAPI很火,但完全没接触过后端怎么办?”
我当初学后端时,也是从Java的Spring Boot开始的(没错,很多科班同学的第一门后端课就是它)。但后来转到Python生态,发现FastAPI简直为新手和效率党量身打造——自动文档、类型提示、异步支持,三件套直接拉满开发体验。今天这篇教程,就带你从零搭建第一个FastAPI应用,哪怕你连“后端是啥”都还不太清楚!
为什么选 FastAPI?和 Java Spring Boot 有啥区别?
先说结论:如果你会一点 Python,想快速上手后端开发,FastAPI 是目前最友好的选择之一。
| 特性 | FastAPI (Python) | Spring Boot (Java) |
|---|---|---|
| 学习曲线 | 平缓,适合零基础 | 较陡,需理解面向对象、注解等 |
| 开发速度 | 极快,几行代码就能跑起来 | 配置较多,启动慢 |
| 自动 API 文档 | ✅ 内置 Swagger + ReDoc | ❌ 需额外集成 Springdoc |
| 类型安全 | ✅ 原生支持 Python 类型提示 | ✅ 但依赖编译期检查 |
| 异步支持 | ✅ 原生 async/await | ✅ 但配置复杂 |
💡 我的建议:如果你是非科班、想快速做出能用的后端接口,先用 FastAPI 入门;等理解了 HTTP、路由、数据库等概念后,再去看 Spring Boot 会事半功倍。
第一步:环境准备(5分钟搞定)
1. 安装 Python(3.7+)
去 python.org 下载最新版(推荐 3.10 或 3.11),安装时记得勾选 “Add to PATH”!
验证是否成功:
python --version
# 应该输出类似:Python 3.11.4
2. 创建虚拟环境(隔离项目依赖)
# 创建名为 fastapi-demo 的虚拟环境
python -m venv fastapi-demo
# 激活环境(Windows)
fastapi-demo\Scripts\activate
# 激活环境(Mac/Linux)
source fastapi-demo/bin/activate
激活后,命令行前缀会出现 (fastapi-demo),说明成功了!
3. 安装 FastAPI 和 Uvicorn
Uvicorn 是一个超快的 ASGI 服务器,用来运行 FastAPI 应用。
pip install fastapi uvicorn[standard]
第二步:写你的第一个 API(3行代码!)
在项目文件夹里新建 main.py,输入以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def hello():
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 新手!"}
🎉 恭喜!你已经写出了第一个后端接口!
核心概念:用大白话讲清楚
1. 路由(Route)是什么?
就像快递地址,告诉服务器:“当用户访问 /users 时,执行哪个函数”。
@app.get("/users") # GET 请求
@app.post("/users") # POST 请求(创建数据)
@app.put("/users/1") # PUT 请求(更新数据)
2. 路径参数 vs 查询参数
- 路径参数:URL 中的动态部分,比如
/users/123中的123 - 查询参数:URL 问号后面的,比如
/search?q=python&page=1
# 路径参数
@app.get("/items/{item_id}")
def read_item(item_id: int):
return {"item_id": item_id}
# 查询参数
@app.get("/search")
def search(q: str = None, page: int = 1):
return {"query": q, "page": page}
3. 请求体(Body):接收 JSON 数据
用 pydantic 模型定义数据结构,FastAPI 自动校验!
from pydantic import BaseModel
class UserCreate(BaseModel):
name: str
age: int
@app.post("/users")
def create_user(user: UserCreate):
return {"name": user.name, "age": user.age + 1} # 返回时还能加工!
✅ 新手福利:只要定义好模型,FastAPI 会自动拒绝非法请求(比如 age 传字符串),并返回清晰错误!
实战:做一个“待办事项”小 API
目标:实现增删查三个接口。
1. 定义数据模型
# main.py
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class TodoItem(BaseModel):
id: int
title: str
completed: bool = False
2. 模拟数据库(内存存储)
# 临时存数据,重启就丢(生产环境用数据库!)
todos = [
TodoItem(id=1, title="学习 FastAPI", completed=True),
TodoItem(id=2, title="写教程", completed=False)
]
3. 实现接口
# 获取所有待办
@app.get("/todos", response_model=List[TodoItem])
def get_todos():
return todos
# 创建新待办
@app.post("/todos", response_model=TodoItem)
def create_todo(todo: TodoItem):
todos.append(todo)
return todo
# 删除待办
@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: int):
global todos
todos = [t for t in todos if t.id != todo_id]
return {"message": "Deleted"}
4. 测试一下!
运行服务后,访问 http://127.0.0.1:8000/docs —— 看!自动生成的交互式文档出现了!
你可以直接在网页上点击 “Try it out”,填参数、点 Execute,立刻看到请求和响应。再也不用手动用 Postman 了!
新手常见问题 & 避坑指南
❓ 问题1:为什么我的修改没生效?
- 原因:没加
--reload参数。 - 解决:确保启动命令是
uvicorn main:app --reload,它会在代码变更时自动重启。
❓ 问题2:路径参数和查询参数搞混了?
- 记住口诀:路径参数在 URL 路径里(如
/users/1),查询参数在?后面(如?page=1)。 - 技巧:在函数参数里,不带默认值的是路径参数,带默认值的是查询参数。
❓ 问题3:报错 422 Unprocessable Entity?
- 原因:请求数据不符合 Pydantic 模型(比如 required 字段缺失,或类型错误)。
- 解决:看返回的错误详情,它会明确告诉你哪字段错了。
❓ 问题4:能不能连接真实数据库?
当然可以!FastAPI 本身不绑定数据库,你可以搭配:
- SQL:SQLAlchemy + databases(异步) 或 Tortoise ORM
- NoSQL:Motor(MongoDB 异步驱动)
🚫 避坑提醒:新手别一上来就搞数据库!先用内存列表把逻辑跑通,再替换存储层。
下一步怎么学?我的学习路线建议
巩固基础
- 掌握 HTTP 方法(GET/POST/PUT/DELETE)
- 理解状态码(200, 404, 422, 500)
- 熟悉 JSON 数据格式
进阶功能
- 添加用户认证(OAuth2, JWT)
- 连接 SQLite / PostgreSQL
- 使用中间件(日志、CORS)
- 编写单元测试
对比学习
- 用 Spring Boot 实现同样功能,体会“约定优于配置” vs “显式优于隐式”
- 思考:什么场景更适合 Python?什么场景必须用 Java?
部署上线
- 用 Docker 打包应用
- 部署到云服务器(如阿里云轻量应用服务器)
- 配置 Nginx 反向代理
结语
FastAPI 的魅力在于:它让后端开发变得简单、直观、甚至有点 fun。你不需要记住一堆注解,不用被 Maven 依赖折磨,几行代码就能看到成果——这对初学者建立信心太重要了。
我当初从 Spring Boot 转到 FastAPI 时,最大的感受是:“原来写后端可以这么清爽!” 希望这篇教程也能帮你迈出第一步。
📢 互动时间:你在学习 FastAPI 时遇到过什么坑?欢迎在评论区留言!如果这篇对你有帮助,别忘了点赞关注,我会持续更新更多“大厂视角 + 新手友好”的实战教程!
记住:每一个大神,都曾是连 pip install 都打错的新手。 加油!

评论 0