2. 环境搭建:安装 Python 3.10+、FastAPI、Uvicorn、Postman/cURL,创建基础项目结构

在开始编写鉴权拦截中间件之前,需要先搭建一套干净、可复现的本地开发环境。本章将指导你完成从 Python 版本选择到项目骨架创建的全过程,确保后续所有工程案例都能在统一的环境中运行。

2.1 技术栈版本选择与说明

本课程基于以下核心组件版本进行开发与测试,建议严格对齐以避免兼容性问题:

组件 推荐版本 用途 安装方式
Python 3.10 ~ 3.12 运行时基础 官网 / pyenv
FastAPI 0.110+ Web 框架 pip
Uvicorn 0.29+ ASGI 服务器 pip
Postman 最新稳定版 API 调试 官网下载
cURL 系统自带 / 7.68+ 命令行测试 系统包管理器
版本对齐提示:Python 3.9 及以下版本已停止安全更新,且不支持部分类型注解语法;Python 3.13 目前部分第三方库尚未适配。本课程锁定 3.10~3.12 区间,兼顾稳定性与新特性。

2.2 安装 Python 3.10+

推荐使用 pyenv 管理多版本 Python,避免污染系统环境。以下是 macOS / Linux 的快速安装步骤:

# 安装 pyenv(macOS 使用 Homebrew)
brew install pyenv

# 安装 Python 3.11
pyenv install 3.11.9

# 设置全局版本
pyenv global 3.11.9

# 验证版本
python --version
# 输出: Python 3.11.9

Windows 用户建议直接使用 Python 官网安装包,安装时勾选 "Add Python to PATH"。

2.3 创建虚拟环境与安装依赖

每个项目使用独立的虚拟环境,是工程化部署的基本要求。以下命令在项目根目录下创建并激活环境:

# 创建项目目录
mkdir openapi-auth-project && cd openapi-auth-project

# 创建虚拟环境
python -m venv venv

# 激活环境(macOS/Linux)
source venv/bin/activate

# 激活环境(Windows PowerShell)
.\venv\Scripts\Activate.ps1

# 安装核心依赖
pip install fastapi uvicorn[standard] python-multipart

# 验证安装
pip list | grep -E "fastapi|uvicorn"
# 输出示例:
# fastapi           0.115.0
# uvicorn           0.30.6
注意:不要使用 pip install fastapi uvicorn 省略 [standard],否则会缺少 uvicorn[standard] 包含的 watchfiles 热重载支持,影响开发效率。

2.4 基础项目结构设计

一个适合鉴权拦截工程的项目结构,应当将路由、中间件、模型、配置清晰分离。以下是本课程采用的标准骨架:

openapi-auth-project/
├── app/
│   ├── __init__.py
│   ├── main.py              # FastAPI 应用入口
│   ├── config.py            # 配置管理(密钥、算法等)
│   ├── middleware/
│   │   ├── __init__.py
│   │   └── auth_middleware.py  # 鉴权拦截中间件
│   ├── routers/
│   │   ├── __init__.py
│   │   ├── public.py        # 公开接口(登录、注册)
│   │   └── protected.py     # 受保护接口(需鉴权)
│   ├── models/
│   │   ├── __init__.py
│   │   └── token.py         # Token 数据模型
│   └── utils/
│       ├── __init__.py
│       └── jwt_handler.py   # JWT 签发与验证工具
├── tests/
│   ├── __init__.py
│   └── test_auth.py         # 鉴权单元测试
├── requirements.txt         # 依赖锁定文件
└── .env                     # 环境变量(不提交到 Git)
结构要点:
  • main.py 只做应用初始化与路由挂载,不写业务逻辑。
  • middleware/ 目录独立存放鉴权、日志、CORS 等中间件。
  • routers/ 按公开/受保护拆分,便于后续添加权限粒度控制。
  • utils/ 封装 JWT 工具函数,保持中间件代码简洁。

2.5 编写最小化 FastAPI 应用

在 app/main.py 中写入以下代码,验证环境是否正常工作:

from fastapi import FastAPI

app = FastAPI(title="OpenAPI Auth Demo", version="0.1.0")

@app.get("/")
def root():
    return {"message": "环境搭建成功,鉴权拦截工程准备就绪"}

@app.get("/health")
def health_check():
    return {"status": "ok"}

2.6 启动 Uvicorn 并验证

使用以下命令启动开发服务器,开启热重载:

# 开发模式(热重载)
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000

# 输出示例:
# INFO:     Uvicorn running on http://0.0.0.0:8000
# INFO:     Application startup complete.

打开浏览器访问 http://localhost:8000/docs,应看到 FastAPI 自动生成的 Swagger 文档页面。访问 http://localhost:8000/health 应返回 JSON:{"status": "ok"}。

2.7 使用 Postman / cURL 测试接口

在终端或 Postman 中执行以下请求,确认服务响应正常:

# cURL 测试根路径
curl http://localhost:8000/
# 返回: {"message":"环境搭建成功,鉴权拦截工程准备就绪"}

# cURL 测试健康检查
curl http://localhost:8000/health
# 返回: {"status":"ok"}

Postman 操作步骤:

  1. 打开 Postman,点击 New Collection,命名为 OpenAPI Auth Demo。
  2. 添加 GET 请求,URL 填入 http://localhost:8000/,点击 Send。
  3. 添加第二个 GET 请求,URL 填入 http://localhost:8000/health,确认返回 200。
  4. 将两个请求保存到集合中,后续章节将在此基础上添加鉴权测试。

2.8 环境搭建流程总览

下图展示了从零开始到服务可用的完整链路,以及各工具在链路中的角色:

环境搭建流程与工具角色图 环境搭建流程与工具角色 1. 安装 Python 2. 创建虚拟环境 3. pip 安装依赖 4. 编写 main.py 5. uvicorn 启动服务 6. 浏览器 /docs 7. Postman / cURL 关键验证点: • /docs 页面正常加载 → FastAPI 路由注册成功 • /health 返回 200 → Uvicorn 与 ASGI 链路正常

2.9 常见问题与避坑指南

问题现象 原因 解决方案
pip: command not found Python 未加入 PATH 重新安装 Python 并勾选 "Add to PATH"
uvicorn: command not found 虚拟环境未激活 执行 source venv/bin/activate(Linux/macOS)
ModuleNotFoundError: No module named 'fastapi' 依赖安装到了系统环境而非虚拟环境 确认 which python 指向 venv 路径,重新 pip install
热重载不生效 未安装 uvicorn[standard] pip install uvicorn[standard] 重新安装
端口 8000 被占用 其他进程占用端口 使用 lsof -i :8000 查找并 kill,或更换 --port 8001
生产环境提示:本课程开发阶段使用 --reload 热重载。生产部署时务必去掉 --reload 参数,并使用 gunicorn + uvicorn workers 多进程模式,具体配置将在第 28 章详细讲解。

2.10 本章小结

至此,你已经完成了以下关键步骤:

  • 安装了 Python 3.10+ 并创建了隔离的虚拟环境。
  • 通过 pip 安装了 FastAPI 与 Uvicorn 核心依赖。
  • 搭建了适合鉴权拦截工程的标准项目目录结构。
  • 编写并启动了最小化 FastAPI 应用,验证了 Swagger 文档与健康检查接口。
  • 使用 Postman 和 cURL 完成了接口测试,确认开发环境就绪。