3. Web 开发

Python 是 Web 开发的热门选择,本章介绍 FastAPI 和 Flask 两个主流框架的使用和最佳实践。

3.5. 框架对比

特性

FastAPI

Flask

类型

异步优先

同步为主

性能

高(异步)

中等

类型提示

原生支持

可选

自动文档

Swagger/OpenAPI

需要扩展

学习曲线

中等

生态系统

成长中

成熟

适用场景

API、微服务

Web 应用、API

3.6. 快速对比

3.6.1. FastAPI

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class User(BaseModel):
    name: str
    email: str
    age: int

@app.post("/users/")
async def create_user(user: User):
    # 自动验证、序列化、文档
    return {"user": user, "message": "Created"}

# 自动生成 OpenAPI 文档:/docs

3.6.2. Flask

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/users/", methods=["POST"])
def create_user():
    data = request.get_json()
    # 手动验证
    if not data.get("name"):
        return jsonify({"error": "Name required"}), 400
    return jsonify({"user": data, "message": "Created"})

3.7. 选择建议

        graph TD
    A[项目类型?] --> B{纯 API}
    A --> C{Web 应用}
    A --> D{微服务}
    
    B --> E{需要高性能?}
    E -->|是| F[FastAPI]
    E -->|否| G[FastAPI 或 Flask]
    
    C --> H{需要模板渲染?}
    H -->|是| I[Flask]
    H -->|否| F
    
    D --> F
    
选择 FastAPI 当
  1. 构建 RESTful API

  2. 需要自动 API 文档

  3. 利用类型提示和验证

  4. 需要异步/高并发

  5. 构建微服务

选择 Flask 当
  1. 需要服务端渲染

  2. 项目较简单

  3. 团队熟悉 Flask

  4. 需要大量扩展支持

  5. 快速原型开发

3.8. 项目结构

3.8.1. 推荐的 FastAPI 项目结构

my_api/
├── app/
│   ├── __init__.py
│   ├── main.py           # FastAPI 应用入口
│   ├── config.py         # 配置
│   ├── dependencies.py   # 依赖注入
│   ├── models/           # Pydantic 模型
│   │   ├── __init__.py
│   │   └── user.py
│   ├── schemas/          # 数据库模型(SQLAlchemy)
│   │   ├── __init__.py
│   │   └── user.py
│   ├── routers/          # 路由
│   │   ├── __init__.py
│   │   └── users.py
│   ├── services/         # 业务逻辑
│   │   ├── __init__.py
│   │   └── user_service.py
│   └── utils/            # 工具函数
├── tests/
│   ├── __init__.py
│   └── test_users.py
├── requirements.txt
└── pyproject.toml

3.8.2. 推荐的 Flask 项目结构

my_app/
├── app/
│   ├── __init__.py       # 应用工厂
│   ├── config.py         # 配置
│   ├── models/           # 数据库模型
│   │   └── user.py
│   ├── views/            # 视图/路由
│   │   ├── __init__.py
│   │   └── users.py
│   ├── services/         # 业务逻辑
│   ├── templates/        # Jinja2 模板
│   └── static/           # 静态文件
├── migrations/           # 数据库迁移
├── tests/
├── requirements.txt
└── run.py

3.9. 开发环境设置

# 创建虚拟环境
python -m venv venv
source venv/bin/activate  # Linux/macOS

# FastAPI
pip install "fastapi[all]"  # 包含 uvicorn

# Flask
pip install flask flask-sqlalchemy flask-migrate

# 开发工具
pip install pytest httpx black mypy

# 运行 FastAPI
uvicorn app.main:app --reload

# 运行 Flask
flask run --debug