FastAPI入门:Python后端开发新手指南
大家好,我是一名开源项目的维护者,也经常在社区做技术分享。最近有不少朋友私信问我:“有没有适合零基础的FastAPI教程?”回想起我自己刚开始学后端开发时,面对各种框架一头雾水,连“路由”是什么都不清楚。所以今天,我想用最通俗的语言,带你从零开始搭建一个真正能跑起来的FastAPI项目。
即使你从未接触过后端开发,甚至对Python也只是略知一二,也没关系。我会像带实习生一样,手把手教你每一步。这篇文章不讲大道理,只聚焦实战——我们最终会一起完成一个“在线书籍管理API”,你可以用它来添加、查询、删除书籍信息。
为什么选择FastAPI?和Go比怎么样?
首先,FastAPI是一个基于Python的现代Web框架,专为构建高性能API(应用程序接口)而设计。它的核心优势是:
- 自动文档生成:写完代码,API文档自动生成
- 类型安全:借助Python的类型提示(Type Hints),减少错误
- 性能接近Go:得益于底层库Starlette和Pydantic,FastAPI的性能在Python框架中名列前茅,甚至接近某些Go语言框架
📌 小知识:Go(又称Golang)是Google开发的一种编译型语言,以高并发和简洁著称。如果你未来想深入后端工程,Go确实值得学习。但作为初学者,Python + FastAPI的学习曲线更平缓,开发效率更高。
| 对比项 | FastAPI (Python) | Go (Gin/Echo等框架) |
|---|---|---|
| 学习难度 | ⭐⭐ | ⭐⭐⭐⭐ |
| 开发速度 | 快 | 中等 |
| 性能 | 高(异步支持好) | 极高 |
| 自动文档 | ✅ 内置Swagger/UI | ❌ 需额外工具 |
| 适合人群 | 初学者、数据科学家、快速原型 | 高并发系统、云原生应用 |
所以,如果你的目标是快速上手后端开发,FastAPI是非常友好的起点。
第一步:环境准备(5分钟搞定)
我们要安装Python、FastAPI和一个本地服务器。别担心,命令我都给你写好了。
1. 确保安装Python 3.7+
打开终端(Mac/Linux)或命令提示符(Windows),输入:
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
Uvicorn 是一个超快的ASGI服务器,用于运行FastAPI应用。
pip install fastapi uvicorn
💡 避坑指南:不要用
pip install fastapi[all],很多新手会装一堆用不到的依赖。我们按需安装即可。
第二步:你的第一个FastAPI程序
现在,让我们写一个“Hello World”级别的API。
1. 创建文件 main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
这段代码做了三件事:
- 导入
FastAPI类 - 创建一个
app实例(这就是你的应用) - 定义一个路径操作:当用户访问根路径
/时,返回 JSON{"Hello": "World"}
2. 运行服务
在终端执行:
uvicorn main:app --reload
参数说明:
main:Python文件名(main.py)app:文件中创建的FastAPI实例名--reload:开发模式下,代码修改后自动重启服务(超实用!)
你会看到类似输出:
INFO: Uvicorn running on http://127.0.0.1:8000
3. 访问API
打开浏览器,输入 http://127.0.0.1:8000,你会看到:
{"Hello": "World"}
更神奇的是,访问 http://127.0.0.1:8000/docs,你会看到自动生成的交互式API文档(Swagger UI)!
✅ 恭喜你!你已经完成了第一个FastAPI应用。
第三步:核心概念解析(用最简单的话说清楚)
什么是“路由”?
路由就是URL路径。比如:
/books→ 获取所有书籍/books/1→ 获取ID为1的书籍
在FastAPI中,用装饰器定义路由:
@app.get("/books") # GET请求
@app.post("/books") # POST请求(创建新书)
@app.put("/books/{id}") # PUT请求(更新某本书)
@app.delete("/books/{id}") # DELETE请求(删除)
什么是“路径参数”和“请求体”?
- 路径参数:出现在URL中的变量,比如
/books/5中的5 - 请求体:POST/PUT请求中携带的数据(通常为JSON)
示例:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Book(BaseModel):
title: str
author: str
year: int
# 路径参数:book_id
@app.get("/books/{book_id}")
def get_book(book_id: int):
return {"book_id": book_id, "title": "《Python入门》"}
# 请求体:book
@app.post("/books")
def create_book(book: Book):
return {"message": f"已添加《{book.title}》,作者:{book.author}"}
🔍 注意:
Book类继承自BaseModel,这是Pydantic的核心,它会自动校验数据类型。比如你传了一个字符串给year,FastAPI会直接返回422错误,告诉你格式不对。
第四步:实战项目——构建“书籍管理API”
现在,我们来做一个完整的功能:管理你的藏书。
项目目标
实现以下API:
- GET
/books→ 获取所有书籍 - GET
/books/{id}→ 获取某本书 - POST
/books→ 添加新书 - DELETE
/books/{id}→ 删除某本书
1. 准备数据存储(简化版)
为了不让初学者被数据库吓到,我们先用一个列表模拟数据库:
# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from typing import List
app = FastAPI()
# 模拟数据库
books_db = [
{"id": 1, "title": "《流畅的Python》", "author": "Luciano Ramalho", "year": 2018},
{"id": 2, "title": "《Effective Python》", "author": "Brett Slatkin", "year": 2020},
]
class BookCreate(BaseModel):
title: str
author: str
year: int
class Book(BookCreate):
id: int
2. 实现各个接口
# 获取所有书籍
@app.get("/books", response_model=List[Book])
def get_books():
return books_db
# 获取单本书
@app.get("/books/{book_id}", response_model=Book)
def get_book(book_id: int):
for book in books_db:
if book["id"] == book_id:
return book
raise HTTPException(status_code=404, detail="书籍未找到")
# 添加新书
@app.post("/books", response_model=Book)
def create_book(book: BookCreate):
new_id = max([b["id"] for b in books_db]) + 1 if books_db else 1
new_book = {"id": new_id, **book.dict()}
books_db.append(new_book)
return new_book
# 删除书籍
@app.delete("/books/{book_id}")
def delete_book(book_id: int):
for i, book in enumerate(books_db):
if book["id"] == book_id:
books_db.pop(i)
return {"message": "删除成功"}
raise HTTPException(status_code=404, detail="书籍未找到")
3. 测试你的API
启动服务:
uvicorn main:app --reload
然后:
- 打开
http://127.0.0.1:8000/docs - 点击
/books→ Try it out → Execute,查看所有书籍 - 点击 POST
/books,输入JSON:{ "title": "《FastAPI实战》", "author": "张三", "year": 2023 } - 再次GET
/books,确认新书已添加
✨ 看!你已经有了一个可交互的后端服务,完全不需要前端!
新手常见问题解答(FAQ)
Q1: 为什么我的代码改了但网页没更新?
A: 确保启动时加了 --reload 参数。如果没有,手动停止服务(Ctrl+C)再重新运行。
Q2: 报错 ModuleNotFoundError: No module named 'fastapi'
A: 你可能没激活虚拟环境,或者在错误的环境中安装了包。检查:
- 是否看到
(fastapi-env)前缀? - 在激活环境下重新运行
pip install fastapi uvicorn
Q3: 能不能用中文字段?
A: 可以!Python 3 默认支持UTF-8,只要你的编辑器保存为UTF-8编码即可。
Q4: 这个“数据库”一关服务就没了,怎么办?
A: 这是故意简化的。下一步你可以学 SQLite(轻量级文件数据库)或 PostgreSQL。但先掌握API逻辑更重要!
下一步学习建议
你已经迈出了关键一步!接下来,我建议你按这个路径深入:
学习数据库集成
尝试用SQLAlchemy+SQLite替换列表存储。推荐官方教程:FastAPI + SQLAlchemy阅读经典书籍
- 《FastAPI官方文档》(免费且优秀)
- 《Python Web开发:从入门到实践》(含FastAPI章节)
- 如果想对比Go,可读《Go语言编程》
参与技术分享
把你做的项目发到GitHub,写一篇博客。我在开源社区发现,教别人是最好的学习方式。尝试部署
用Render或Railway免费部署你的API,让全世界都能访问!
结语
我当初学后端时,花了两周才搞懂“请求-响应”模型。而今天,你只用一个小时就做出了一个带文档、带CRUD操作的API。技术的进步,让学习变得越来越友好。
记住:每一个复杂的系统,都是从一行print("Hello")开始的。你现在写的这几行代码,也许就是未来某个爆款产品的起点。
如果你觉得这篇教程有帮助,欢迎在评论区留言,或者把链接分享给同样在学习的朋友。技术因分享而强大。
Happy Coding!

评论 0