【超详细】Python FastAPI 入门:写给新手的“保姆级”教程

【超详细】Python FastAPI 入门:写给新手的“保姆级”教程(2025–2026 最新版)

这篇教程的目标是:
零基础 → 能独立写出生产级别的 RESTful API
预计认真跟着做完前 80%,你大概需要 3–10 天(每天 2–4 小时)。

目录(建议按顺序阅读)

  1. 为什么选择 FastAPI(而不是 Flask / Django)
  2. 环境准备(最稳的几种方式)
  3. 第一个 FastAPI 程序(Hello World)
  4. 核心概念速览(5 分钟建立大局观)
  5. 路径参数、查询参数、请求体(最常用三大输入方式)
  6. 响应模型 & 状态码
  7. 依赖注入(Dependency Injection)入门
  8. 异步 vs 同步(什么时候用 async def)
  9. 数据库连接(SQLAlchemy + asyncpg 推荐组合)
  10. 自动生成的交互式文档(Swagger & ReDoc)
  11. 错误处理 & 自定义异常
  12. 安全基础(JWT + OAuth2)
  13. 项目结构推荐(中大型项目怎么组织)
  14. 部署(Docker + gunicorn + uvicorn 最常见组合)
  15. 常见问题 & 调试技巧

1. 为什么选择 FastAPI(2025–2026 视角)

维度FastAPIFlaskDjango结论(2025–2026)
开发速度★★★★★★★★★☆★★★☆☆最快
性能接近 Node.js / Go中等中等偏下目前 Python 最快
自动文档OpenAPI + Swagger + ReDoc需手动或扩展admin 强大但 API 需额外写碾压
类型提示支持原生 Pydantic v2需插件部分支持现代开发标配
异步支持原生 async/await需 gevent 或异步扩展Channels(较重)天生异步
学习曲线(新手)中等(但文档极好)最低较高性价比最高
社区活跃度爆炸式增长成熟但增速放缓非常成熟未来 3–5 年首选

一句话结论:
如果你 2025–2026 年想用 Python 写高性能、现代、好维护的 API,FastAPI 几乎是唯一主流选择。

2. 环境准备(选一种最适合你的)

推荐组合(最稳)
Python 3.10 / 3.11 / 3.12 + uv / pdm / poetry(现代包管理) + venv

最快上手方式(5 分钟)

# 方式一:用 uv(2025 年最推荐的极简工具,速度比 pip 快 10–100 倍)curl -LsSf https://astral.sh/uv/install.sh |sh uv venv source .venv/bin/activate # Windows 用 .venv\Scripts\activate uv pip install fastapi[standard] uvicorn[standard]

备选方式(经典 pip + venv)

python -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install --upgrade pip pip install fastapi[standard] uvicorn[standard]

安装完成后运行下面代码测试:

# main.pyfrom fastapi import FastAPI app = FastAPI()@app.get("/")defread_root():return{"Hello":"FastAPI"}

启动:

uvicorn main:app --reload # 或 python -m uvicorn main:app --reload 

浏览器打开:http://127.0.0.1:8000
看到 JSON 就成功了!

再访问 http://127.0.0.1:8000/docs → 自动 Swagger 界面出现,恭喜你进入 FastAPI 世界!

3. 核心概念速览(5 分钟建立心智模型)

概念通俗解释代码例子简写
FastAPI()创建应用实例app = FastAPI()
@app.get/post/…路由装饰器@app.get(“/items/{item_id}”)
路径参数URL 里的动态部分item_id: int
查询参数?key=valueq: str = None
请求体POST/PUT 里的 JSONitem: Item
Pydantic BaseModel数据验证 + 序列化 + 自动文档class Item(BaseModel): …
Depends依赖注入(认证、数据库、配置等)Depends(get_current_user)
BackgroundTasks后台任务(发邮件、记录日志)background_tasks.add_task(…)

4. 经典入门案例:图书管理 API(边学边写)

我们用一个“简易图书管理系统”贯穿全文。

models.py

from pydantic import BaseModel, Field from typing import Optional classBookBase(BaseModel): title:str= Field(..., min_length=1, max_length=100) author:str= Field(..., min_length=1, max_length=50) year:int= Field(..., ge=1900, le=2100)classBookCreate(BookBase):passclassBook(BookBase):id:int is_available:bool=TrueclassConfig: from_attributes =True# 兼容 ORM

main.py(逐步添加)

from fastapi import FastAPI, HTTPException, Query, Path from typing import List from models import Book, BookCreate app = FastAPI(title="图书管理 API", version="0.1.0")# 假数据库 books_db: List[Book]=[ Book(id=1, title="Python速成", author="重阳", year=2025),]@app.get("/books/", response_model=List[Book])defget_books( skip:int= Query(0, ge=0), limit:int= Query(10, ge=1, le=100), author: Optional[str]=None): result = books_db[skip : skip + limit]if author: result =[b for b in result if b.author.lower()== author.lower()]return result @app.get("/books/{book_id}", response_model=Book)defget_book(book_id:int= Path(..., ge=1)):for book in books_db:if book.id== book_id:return book raise HTTPException(status_code=404, detail="图书不存在")@app.post("/books/", response_model=Book, status_code=201)defcreate_book(book: BookCreate): new_id =max(b.idfor b in books_db)+1if books_db else1 new_book = Book(id=new_id,**book.model_dump()) books_db.append(new_book)return new_book 

启动后就能在 Swagger 上直接测试增删改查了。

下一阶段预告(建议按顺序继续)

  • 第 5–8 节:请求体、响应模型、依赖注入、异步路由
  • 第 9–10 节:连真实数据库(PostgreSQL + SQLAlchemy 异步)
  • 第 11–13 节:认证(JWT)、项目结构、错误处理
  • 第 14–15 节:Docker 部署 + 生产化配置

你现在最想先深入哪一部分?

  1. 继续跟着上面的图书系统写数据库部分(SQLAlchemy async)
  2. 先把认证(JWT + OAuth2)补上
  3. 想看完整项目结构推荐(文件夹怎么分)
  4. 想直接看 Docker + 生产部署方案
  5. 有具体报错或想改某个功能(告诉我)

回复我,我继续陪你写下去~ 😄

Read more

解密链表环的起点:LeetCode 142 题

解密链表环的起点:LeetCode 142 题

解密链表环的起点:LeetCode 142 题 * 视频地址 * 🌟 引言 * 🔍 问题描述 * 🧠 解题思路回顾 * 快慢指针算法 * 数学原理 * 💻 C++代码实现 * 🛠 代码解析 * 数据结构定义 * 算法实现细节 * 🚀 性能分析 * 🐞 常见问题与调试 * 常见错误 * 调试技巧 * 📊 复杂度对比表 * 🌈 总结 视频地址 因为想更好的为大佬服务,制作了同步视频,这是Bilibili的视频地址 🌟 引言 链表环检测问题在C++中同样是一个经典面试题。本文将用C++实现LeetCode 142题"环形链表II"的解决方案,深入讲解快慢指针算法的原理和实现细节。 🔍 问题描述 给定一个链表的头节点 head,返回链表开始入环的第一个节点。如果链表无环,则返回 nullptr。 🧠 解题思路回顾 快慢指针算法 1. 使用两个指针:slow每次走一步,fast每次走两步 2.

By Ne0inhk
【优选算法必刷100题】第021-022题(二分查找):山峰数组的的峰顶索引、寻找峰值

【优选算法必刷100题】第021-022题(二分查找):山峰数组的的峰顶索引、寻找峰值

🔥个人主页:Cx330🌸 ❄️个人专栏:《C语言》《LeetCode刷题集》《数据结构-初阶》《C++知识分享》 《优选算法指南-必刷经典100题》《Linux操作系统》:从入门到入魔 🌟心向往之行必能至 🎥Cx330🌸的简介: 目录 前言: 21. 山峰数组的的峰顶索引 解法(二分查找): 算法思路: 二分查找解法代码(C++): 22. 寻找峰值 解法(二分查找): 算法思路: 二分查找解法代码(C++): 总结: 前言: 聚焦算法题实战,系统讲解三大核心板块:“精准定位最优解”——优选算法,“简化逻辑表达,系统性探索与剪枝优化”——递归与回溯,“以局部最优换全局高效”——贪心算法,讲解思路与代码实现,帮助大家快速提升代码能力 二分查找专题 21. 山峰数组的的峰顶索引 题目链接: 852. 山脉数组的峰顶索引 -

By Ne0inhk
我爱学算法之——floodfill算法(上)

我爱学算法之——floodfill算法(上)

前言 Flood Fill(也称为种子填充算法)是一种用于确定连接到多维数组中给定节点的区域的算法 核心思想 * 从起点开始:从一个初始像素(种子点)开始 * 扩散填充:向四周(通常为4方向或8方向)扩展 * 条件匹配:只填充与种子点颜色相同且相邻的像素 * 避免重复:标记已访问的位置,防止重复处理 一、图像渲染 题目解析 给定一个 m*n 的二维数组,从起始位置 [sr,sc] 开始,将从起始位置的 上下左右 四个方向上 相邻且与起始位置初始颜色相同的像素点进行染色,直到没有其他原始颜色的相邻像素。 算法思路 这道题整体还是非常简单的,从起始位置开始,进行一次深度优先遍历 DFS 即可。 注意:当起始位置[sr, sc]的颜色和目标颜色 color 相同时,直接返回原二维数组即可。 代码实现

By Ne0inhk
LeetCode 141题:环形链表的艺术与科学

LeetCode 141题:环形链表的艺术与科学

🌟 LeetCode 141题:环形链表的艺术与科学 * 🌀 环形链表:当数据开始循环舞蹈 * 🔍 解法一:哈希表法 - 记忆的艺术 * 解题思路 * 性能分析 * 🏃‍♂️ 解法二:快慢指针法 - 龟兔赛跑的智慧 * 解题思路 * 性能优势 * 💻 代码实现与调试心得 * 🌈 思维与实现的分离 * 🎯 总结 因为想更好地为义父义母大佬服务,本文 Bilibili 视频地址 🌀 环形链表:当数据开始循环舞蹈 在计算机科学的世界里,链表是一种优雅而基础的数据结构。正常链表如同一条笔直的小路,从起点(head)出发,每个节点指向下一个节点,最终以空指针(nullptr)作为终点,标志着旅程的结束。 Head Node1 Node2 Node3 nullptr 然而,环形链表则打破了这种线性规则,它更像是一个神秘的莫比乌斯环,没有真正的终点。链表的某个节点不再指向空,而是指向链表中已经存在的另一个节点,形成了一个无尽的循环。 Head

By Ne0inhk