为什么我推荐 Python 新手从 FastAPI 开始后端之旅?
大家好,我是掘金上常写入门教程的全栈工程师。最近有好几个零基础的同学问我:“想学后端,Python 和 Go 选哪个?”“Flask、Django、FastAPI 到底有什么区别?”
我当初学后端时也踩过不少坑——装环境装到崩溃、文档看不懂、跑个 “Hello World” 都报错。所以今天,我想用最直白的语言,带你从零开始上手 FastAPI,并顺带聊聊它和 Flask、Django 甚至 Go 的对比。无论你是完全没写过后端的新手,还是只会前端想拓展技能栈的同学,这篇指南都适合你。
一、FastAPI 是什么?能用来做什么?
FastAPI 是一个用 Python 编写的现代 Web 框架,专为构建 高性能 API(应用程序接口) 而生。简单说,它帮你快速搭建一个能接收请求、处理数据、返回结果的“服务”。
比如:
- 用户在手机 App 上点“登录”,App 会向你的 FastAPI 服务发一个请求;
- 你的服务验证用户名密码,然后返回“登录成功”或“密码错误”。
FastAPI 的优势在于:快、简单、自动生成文档、类型安全。它底层基于 Starlette(异步框架)和 Pydantic(数据校验库),性能甚至接近 Go 写的服务!
二、FastAPI vs 其他后端技术:怎么选?
很多新手纠结选哪个框架。下面是我整理的对比表,帮你理清思路:
| 框架/语言 | 学习难度 | 性能 | 自动生成文档 | 异步支持 | 适合场景 |
|---|---|---|---|---|---|
| FastAPI (Python) | ⭐⭐ | ⭐⭐⭐⭐ | ✅(Swagger + ReDoc) | ✅ | 快速开发 API、微服务、机器学习后端 |
| Flask (Python) | ⭐ | ⭐⭐ | ❌(需手动集成) | 有限 | 小型项目、教学、原型验证 |
| Django (Python) | ⭐⭐⭐ | ⭐⭐ | ❌(需 DRF 扩展) | 有限 | 全功能网站(含后台、用户系统等) |
| Go (Gin/Echo) | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 需第三方库 | ✅ | 高并发、云原生、微服务 |
💡 我的开发心得:如果你是 Python 初学者,又只想做 API(不涉及复杂网页),FastAPI 是最佳起点。它语法简洁,错误提示友好,还能自动给你生成漂亮的 API 文档页面,调试起来特别爽。
至于 Go?它确实快,但对新手门槛高(要理解 goroutine、channel 等概念)。我建议:先用 FastAPI 做出东西,建立信心;等有经验了再挑战 Go。
三、环境准备:5 分钟搭好开发环境
步骤 1:安装 Python(3.7+)
去 python.org 下载最新版。安装时记得勾选 “Add to PATH”。
验证安装:
python --version
# 应输出类似:Python 3.11.5
步骤 2:创建虚拟环境(推荐!)
虚拟环境能隔离项目依赖,避免“这个项目装了 A 包,那个项目装了 B 包,结果冲突了”的悲剧。
# 创建名为 fastapi-env 的虚拟环境
python -m venv fastapi-env
# 激活虚拟环境(Windows)
fastapi-env\Scripts\activate
# 激活虚拟环境(Mac/Linux)
source fastapi-env/bin/activate
激活后,命令行前缀会变成 (fastapi-env),说明成功了。
步骤 3:安装 FastAPI 和 Uvicorn
Uvicorn 是一个 ASGI 服务器,用来运行 FastAPI 应用。
pip install fastapi uvicorn
🛑 避坑指南:不要用
pip install fastapi[all]!新手不需要额外依赖,装基础版就行。
四、核心概念:用最简单的例子讲清楚
1. 最小可运行程序
新建文件 main.py,输入以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "你好,FastAPI!"}
运行服务:
uvicorn main:app --reload
main:app表示:从main.py文件中导入app对象--reload表示:代码修改后自动重启(开发时超有用!)
打开浏览器访问 http://127.0.0.1:8000,你会看到:
{"message": "你好,FastAPI!"}
2. 路径参数 & 查询参数
- 路径参数:出现在 URL 路径中,如
/users/123 - 查询参数:出现在
?后面,如/search?q=python
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
访问 /items/42?q=hello,返回:
{"item_id": 42, "q": "hello"}
🔍 注意:
item_id: int声明了类型,FastAPI 会自动校验。如果传字符串"abc",会直接返回 422 错误!
3. 请求体(JSON 数据)
当客户端发送 JSON 数据(比如注册用户信息),用 Pydantic 模型定义结构:
from pydantic import BaseModel
class UserCreate(BaseModel):
name: str
age: int
@app.post("/users/")
def create_user(user: UserCreate):
return {"name": user.name, "age_in_10_years": user.age + 10}
用工具(如 Postman 或 curl)发送 POST 请求:
{
"name": "小明",
"age": 18
}
返回:
{"name": "小明", "age_in_10_years": 28}
五、实战:做一个简单的“待办事项”API
我们来做一个能增删查的 Todo 列表,只用 30 行代码!
# main.py
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List
app = FastAPI()
class Todo(BaseModel):
id: int
title: str
done: bool = False
# 模拟数据库(实际项目用数据库)
todos = [
Todo(id=1, title="学习 FastAPI"),
Todo(id=2, title="写教程", done=True)
]
@app.get("/todos/", response_model=List[Todo])
def get_todos():
return todos
@app.post("/todos/", response_model=Todo)
def create_todo(todo: Todo):
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": "删除成功"}
运行后,你可以:
- GET
/todos/→ 查看所有任务 - POST
/todos/→ 添加新任务(传 JSON) - DELETE
/todos/1→ 删除 ID 为 1 的任务
💡 重点:
response_model=List[Todo]告诉 FastAPI 返回的数据结构,它会自动过滤掉多余字段,并生成文档!
六、新手常见问题解答
Q1:为什么我改了代码,页面没更新?
A:确认是否加了 --reload 参数。如果没有,Ctrl+C 停止服务,重新运行 uvicorn main:app --reload。
Q2:如何查看自动生成的 API 文档?
A:访问:
http://127.0.0.1:8000/docs→ Swagger UI(可交互测试)http://127.0.0.1:8000/redoc→ ReDoc(更美观)
Q3:FastAPI 能连接数据库吗?
A:当然!常用组合:
- SQLite / PostgreSQL + SQLAlchemy(同步)
- PostgreSQL + asyncpg(异步)
但新手建议先用内存列表(如上面的 todos),等熟悉后再加数据库。
Q4:和 Flask 相比,FastAPI 难吗?
A:语法几乎一样简单!但 FastAPI 多了类型提示和自动校验,反而减少 bug。我当初从 Flask 转 FastAPI,只花了一天就适应了。
七、下一步学习建议
深入学习:
- 官方文档(英文好,中文也有):fastapi.tiangolo.com
- 重点看:依赖注入、中间件、异常处理
进阶项目:
- 加 JWT 用户认证
- 连接 SQLite 数据库
- 用 Docker 容器化部署
对比学习:
- 用 Flask 实现同样功能,感受差异
- 了解 Go 的 Gin 框架,看看“快”到底多快(比如压测对比)
🌟 最后的心得:技术没有绝对好坏,只有合不合适。FastAPI 让我快速交付产品,Go 让我在高并发场景游刃有余。先做出东西,再追求极致——这是我对所有新手的忠告。
现在,打开你的编辑器,敲下第一行 from fastapi import FastAPI 吧!你离写出第一个 API,只差一次 uvicorn 命令。

评论 0