FastAPI 入门:Python 后端开发新手也能轻松上手
大家好,我是阿哲,一名在大厂干了三年后端开发的工程师,业余时间也在 B 站做技术 UP 主。最近收到不少粉丝私信问我:“想学后端开发,但 Python 除了写脚本还能干嘛?”“FastAPI 和 Flask 有啥区别?哪个更适合新手?”甚至还有人问:“前端和 Go 是不是更香?”
今天这篇教程,就是专门为完全零基础的同学写的。无论你是刚学完 Python 基础语法的学生,还是从其他语言(比如 Java、Go)转过来的开发者,甚至是会写 HTML 但不懂后端的前端同学,都能跟着一步步跑通一个真正的 Web API。
我当初学后端时,被各种框架、路由、请求、响应绕得晕头转向。所以这篇文章不讲理论堆砌,只讲你能马上跑起来的代码。我们边做边学!
为什么选 FastAPI?它和前端、Go 有啥关系?
先说清楚:FastAPI 是一个用 Python 写的后端框架,用来快速构建 Web API(也就是给前端或其他程序提供数据的服务)。
你可能会听到别人聊:
- 前端:负责页面展示(比如 React、Vue),它需要从后端获取数据。
- Go:另一种高性能后端语言,常用于高并发场景(比如微服务)。
但别慌!作为新手,你不需要立刻掌握所有技术。FastAPI 的优势在于:
- 上手极快:几行代码就能启动一个接口
- 自动生成文档:省去手动写 API 文档的痛苦
- 类型安全:用 Python 的类型提示(Type Hints)减少 Bug
- 性能接近 Go:底层基于 Starlette + Pydantic,异步支持好
💡 小知识:虽然 Go 性能强,但 Python 生态更丰富、学习曲线更平缓。先用 FastAPI 快速做出东西,比纠结“哪个语言更好”更重要!
第一步:搭建开发环境(5 分钟搞定)
1. 安装 Python(3.7+)
确保你的电脑有 Python 3.7 或更高版本。打开终端(Mac/Linux)或命令提示符(Windows),输入:
python --version
# 或
python3 --version
如果没有,请去 python.org 下载安装。
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]
✅ 到此为止,你的开发环境就准备好了!
第二步:5 行代码,写出第一个 API
新建一个文件 main.py,粘贴以下代码:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def home():
return {"message": "Hello, 后端世界!"}
然后在终端运行:
uvicorn main:app --reload
你会看到类似这样的输出:
INFO: Uvicorn running on http://127.0.0.1:8000
现在打开浏览器,访问 http://127.0.0.1:8000,就能看到 JSON 返回:
{"message": "Hello, 后端世界!"}
🎉 恭喜!你已经写出了人生第一个后端 API!
关键概念解释(用大白话)
FastAPI():创建一个应用实例@app.get("/"):定义一个“路由”,当用户用 GET 方法 访问根路径/时,执行下面的函数--reload:开发模式下代码修改自动重启,超实用!
第三步:让前端能调用你的 API
假设你是个前端开发者,或者未来要和前端合作,那么你的 API 需要支持跨域(CORS)。
安装 CORS 中间件:
pip install fastapi[all]
# 或单独安装
pip install python-multipart
修改 main.py:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
# 添加 CORS 中间件
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 允许所有来源(生产环境请限制域名!)
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.get("/api/hello")
def say_hello():
return {"data": "前端你好!我准备好接收请求了"}
现在前端用 fetch 或 axios 就能调用这个接口:
// 前端 JavaScript 示例
fetch("http://localhost:8000/api/hello")
.then(res => res.json())
.then(data => console.log(data));
✅ 提示:实际项目中
allow_origins不要写"*",应指定如["https://your-frontend.com"]。
第四步:实战!做一个“待办事项”小项目
我们来做一个简单的 Todo List API,包含:
- 查看所有任务
- 添加新任务
- 标记任务完成
1. 定义数据模型(Pydantic)
FastAPI 使用 Pydantic 来校验请求/响应数据。新建 models.py:
# models.py
from pydantic import BaseModel
from typing import Optional
class TodoItem(BaseModel):
id: int
title: str
completed: bool = False
class TodoCreate(BaseModel):
title: str
2. 编写 API 路由(main.py)
# main.py
from fastapi import FastAPI, HTTPException
from typing import List
from models import TodoItem, TodoCreate
app = FastAPI()
# 模拟数据库(实际项目用 SQLite/PostgreSQL)
todos = [
TodoItem(id=1, title="学习 FastAPI", completed=True),
TodoItem(id=2, title="写个 Todo API", completed=False)
]
@app.get("/todos", response_model=List[TodoItem])
def get_todos():
return todos
@app.post("/todos", response_model=TodoItem)
def create_todo(todo: TodoCreate):
new_id = max(t.id for t in todos) + 1 if todos else 1
new_todo = TodoItem(id=new_id, title=todo.title)
todos.append(new_todo)
return new_todo
@app.patch("/todos/{todo_id}", response_model=TodoItem)
def complete_todo(todo_id: int):
for todo in todos:
if todo.id == todo_id:
todo.completed = True
return todo
raise HTTPException(status_code=404, detail="任务未找到")
3. 测试你的 API
启动服务后,访问 http://127.0.0.1:8000/docs —— 这是 FastAPI 自动生成的 交互式文档!
你可以直接在网页上:
- 点击
GET /todos查看所有任务 - 点击
POST /todos,填入{"title": "买牛奶"}添加任务 - 点击
PATCH /todos/2完成 ID 为 2 的任务
🔥 自带文档 + 在线测试,这是 FastAPI 最让我惊艳的功能!当年我用 Flask 手写 Swagger 文档,简直噩梦。
新手常见问题 & 避坑指南
❓ Q1:为什么我的代码改了没生效?
- 确保启动时加了
--reload参数 - 如果用 Docker,需挂载代码目录并配置 reload
❓ Q2:如何连接真实数据库?
FastAPI 不强制绑定数据库。常用组合:
| 数据库 | 异步 ORM | 同步 ORM |
|---|---|---|
| SQLite | SQLAlchemy Core | SQLAlchemy |
| PostgreSQL | asyncpg | psycopg2 |
| MySQL | aiomysql | PyMySQL |
建议新手先用 SQLite + SQLAlchemy Core,简单无配置。
❓ Q3:和 Flask、Django 比怎么样?
| 框架 | 学习难度 | 异步支持 | 自动生成文档 | 适用场景 |
|---|---|---|---|---|
| Flask | ⭐⭐ | 需扩展 | 需集成 Swagger | 小型 API、原型 |
| Django | ⭐⭐⭐⭐ | 有限 | 需手动 | 全功能网站(含后台) |
| FastAPI | ⭐⭐ | 原生支持 | ✔️ 内置 | 现代 API、微服务 |
我的建议:做 API 优先选 FastAPI,做完整网站(带登录、管理后台)再考虑 Django。
❓ Q4:Go 不是更快吗?要不要直接学 Go?
- Go 确实性能更强,但开发效率低(没有 Python 的简洁语法)
- FastAPI 在大多数场景下性能足够(每秒处理上千请求很轻松)
- 先做出产品,再优化性能。90% 的初创项目瓶颈不在语言,而在业务逻辑
下一步学习建议
你已经掌握了 FastAPI 的核心用法!接下来可以:
深入学习:
- 用户认证(JWT / OAuth2)
- 数据库集成(SQLAlchemy + Alembic)
- 异步任务(Celery / BackgroundTasks)
部署上线:
- 用 Docker 容器化
- 部署到云服务器(阿里云/腾讯云)或平台(Render, Railway)
结合前端:
- 用 Vue/React 调用你的 API
- 学习 RESTful 设计规范
📌 我的 B 站频道正在更新《FastAPI 实战系列》,从零搭建一个博客系统,欢迎关注!
结语
FastAPI 让我重新爱上了 Python 后端开发——它简洁、现代、高效,特别适合快速验证想法。无论你是想转行后端、做全栈,还是仅仅好奇“后端到底怎么工作”,今天这几行代码就是你迈出的第一步。
记住:不要等“完全准备好”才开始,先跑起来,再优化。就像我当初第一次写 API 时,连“路由”是什么都不知道,但现在每天都在设计高可用的微服务。
动手试试吧!遇到问题,欢迎在评论区留言。如果这篇教程对你有帮助,别忘了点赞收藏,也欢迎分享给身边想学后端的朋友。
技术路上,你我同行。我是阿哲,我们下期再见!

评论 0