原创

Python Web 框架对比与实战:Django vs Flask vs FastAPI

很多框架对比文章喜欢用一句话概括:Django 大而全,Flask 轻量,FastAPI 性能高。

这句话没错,但对真正的技术选型帮助有限。

项目做到半年以后,你真正会在意的是另外几件事:ORM 和数据库迁移谁维护、接口参数谁校验、后台管理系统要不要自己写、异步链路是否真的跑得起来,以及团队新增十几个模块以后,代码还能不能保持同一种组织方式。

Django、Flask 和 FastAPI 的区别,恰恰就在这些地方。

先给结论:三者解决的不是完全相同的问题

截至 2026 年 8 月,Django 最新稳定版为 6.1,Flask 为 3.1.3,FastAPI 为 0.141.1。Django 6.1 要求 Python 3.12+,Flask 3.1.3 要求 Python 3.9+,FastAPI 0.141.1 要求 Python 3.10+。另外,Django 5.2 仍然是 LTS 版本,因此长期维护的企业项目并不一定要机械地追最新 6.1。

先看最核心的差异:

对比项 Django Flask FastAPI
定位 全功能 Web 框架 微框架 API 优先框架
最新版本基线 6.1 3.1.3 0.141.1
Web 协议模型 WSGI + ASGI WSGI ASGI
ORM 内置 Django ORM 不内置 不内置
数据库迁移 内置 通常 Alembic 通常 Alembic
参数校验 Forms / 自行处理 / 第三方 自行处理 / 第三方 Pydantic 原生集成
OpenAPI 非核心能力 非核心能力 自动生成
Swagger UI 需第三方 需第三方 内置
Admin 内置且成熟
用户认证体系 内置 扩展实现 提供安全组件,但业务体系自己搭
异步支持 已支持 ASGI 与大量异步 API 支持 async view,但仍以 WSGI 为核心 原生 ASGI、async-first
项目约束 中等
上手成本 中等
大型项目一致性 很强 依赖团队规范 较强
典型场景 CMS、ERP、内容平台、复杂业务后台 小型服务、Webhook、内部工具 REST API、微服务、AI 服务、高并发 I/O

真正值得记住的是:

Django 给你的是一套完整后端体系,Flask 给你的是组装后端的自由,FastAPI 给你的是围绕 API 契约构建服务的能力。

Django:框架已经替你做了大量架构决定

安装 Django:

pip install Django==6.1

django-admin startproject config .
python manage.py startapp users
python manage.py runserver

一个 Django 项目创建完成后,很多后端项目迟早需要的东西实际上已经存在:

config/
├── settings.py
├── urls.py
├── asgi.py
└── wsgi.py

users/
├── admin.py
├── apps.py
├── migrations/
├── models.py
├── tests.py
└── views.py

数据库 ORM、Migration、Session、Cookie、Authentication、Middleware、Template、Form、Admin、CSRF 防护都在一个统一体系中。

这也是 Django 最大的价值。

有人觉得这些东西“太重”,但如果你的项目本来就要做用户、权限、数据库、运营后台、内容管理,那么它们并不是负担。

你自己重新装一遍才是负担。

例如定义一个用户资料模型:

# users/models.py

from django.db import models


class UserProfile(models.Model):
    name = models.CharField(max_length=50)
    age = models.PositiveSmallIntegerField()
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.name

执行:

python manage.py makemigrations
python manage.py migrate

数据库表结构就进入 Django 的 Migration 管理体系。

后台甚至只需要:

# users/admin.py

from django.contrib import admin
from .models import UserProfile

admin.site.register(UserProfile)

就已经拥有一个可以增删改查数据的后台界面。

对于内容平台、电商后台、CRM、ERP 一类项目,这个能力的价值远远超过几个百分点的接口吞吐差异。

Django 的代价也很明确

Django 有自己的项目组织方式。

Model 怎么写、URL 怎么注册、Middleware 怎么配置、Migration 怎么运行,都有比较明确的规则。

如果团队喜欢完全自由地组织代码,刚开始会觉得 Django 有些“管得太多”。

但大型项目里,这种限制往往反而是优势。

Flask 项目里最容易出现的一个问题就是:

项目 A:
controller/
service/
repository/

项目 B:
routes/
handlers/
dao/

项目 C:
api/
business/
database/

每个人都能写出自己喜欢的结构。

Django 则很难偏到这么远。

Flask:轻量不意味着功能少,而意味着决定权在你手里

Flask 的 Hello World 可能是三个框架中最直接的:

pip install Flask==3.1.3
from flask import Flask

app = Flask(__name__)


@app.get("/")
def index():
    return {"message": "Hello Flask"}

运行:

flask --app app run

它没有要求你先建立完整项目,也不会规定:

ORM 必须是什么
Migration 必须是什么
目录应该怎么分
参数验证应该用什么
登录系统应该怎么做

这就是 Flask 的设计魅力。

但很多刚接触 Flask 的开发者会把“代码少”误解成“项目简单”。

实际上,当项目继续增长,你很快就会开始选择:

Flask
  │
  ├── SQLAlchemy
  ├── Alembic
  ├── Pydantic / Marshmallow
  ├── Flask-Login
  ├── Flask-JWT-Extended
  ├── Flask-Caching
  └── ...

Flask 没有把复杂度消灭。

它只是把选择权交给了你。

这在小服务里非常舒服,在大型团队里则意味着必须自己建立工程规范。

Blueprint 是 Flask 项目必须尽早使用的东西

不要让生产项目最后变成一个几千行的 app.py

Flask 官方提供 Blueprint 来拆分大型应用。

例如:

app/
├── __init__.py
├── extensions.py
├── user/
│   ├── routes.py
│   └── service.py
└── order/
    ├── routes.py
    └── service.py
# app/user/routes.py

from flask import Blueprint

user_bp = Blueprint("user", __name__, url_prefix="/users")


@user_bp.get("/<int:user_id>")
def get_user(user_id):
    return {
        "id": user_id,
        "name": "Tom"
    }

然后:

app.register_blueprint(user_bp)

如果一个 Flask 项目已经开始出现十几个业务模块,却还没有 Application Factory、Blueprint 和统一的扩展初始化方式,后面通常会越来越难维护。

FastAPI:类型声明本身就是 API 契约

FastAPI 最有价值的地方其实不是“Fast”。

而是它把 Python 类型系统、数据验证、OpenAPI 和接口文档连成了一条链。

安装:

pip install "fastapi[standard]==0.141.1"

创建:

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def index():
    return {"message": "Hello FastAPI"}

运行:

fastapi dev

FastAPI 会直接提供:

/docs
/redoc
/openapi.json

它基于 OpenAPI 描述接口,同时结合 Pydantic 完成请求数据转换和验证,Swagger UI 和 ReDoc 也可以直接使用。

例如:

from fastapi import FastAPI
from pydantic import BaseModel, Field

app = FastAPI()


class UserCreate(BaseModel):
    name: str = Field(min_length=1, max_length=50)
    age: int = Field(ge=0, le=150)


@app.post("/users")
async def create_user(user: UserCreate):
    return {
        "name": user.name,
        "age": user.age
    }

请求:

{
  "name": "Tom",
  "age": 25
}

如果传:

{
  "name": "",
  "age": -1
}

不需要自己写:

if age < 0:
    ...

Pydantic 会执行验证,FastAPI 再把验证规则加入 OpenAPI Schema。

这意味着一份类型声明同时服务于:

Python 类型检查
        ↓
请求参数解析
        ↓
参数验证
        ↓
JSON Schema
        ↓
OpenAPI
        ↓
Swagger 文档

这才是 FastAPI 开发 API 时真正舒服的地方。

同一个 API,用三个框架分别实现

假设现在要做两个接口:

POST /users
GET  /users/{id}

用户字段:

id
name
age

为了让框架差异更明显,这里暂时不用数据库,而使用内存字典。

重点不是比谁少写两行代码,而是看“框架默认替你做了什么”。

Django 实现

# users/views.py

import json

from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt


users = {}
next_id = 1


@csrf_exempt
def create_user(request):
    global next_id

    if request.method != "POST":
        return JsonResponse(
            {"message": "Method not allowed"},
            status=405
        )

    try:
        data = json.loads(request.body)
    except json.JSONDecodeError:
        return JsonResponse(
            {"message": "Invalid JSON"},
            status=400
        )

    name = data.get("name")
    age = data.get("age")

    if not isinstance(name, str) or not name:
        return JsonResponse(
            {"message": "Invalid name"},
            status=400
        )

    if not isinstance(age, int) or age < 0:
        return JsonResponse(
            {"message": "Invalid age"},
            status=400
        )

    user = {
        "id": next_id,
        "name": name,
        "age": age
    }

    users[next_id] = user
    next_id += 1

    return JsonResponse(user, status=201)


def get_user(request, user_id):
    user = users.get(user_id)

    if user is None:
        return JsonResponse(
            {"message": "User not found"},
            status=404
        )

    return JsonResponse(user)

URL:

# users/urls.py

from django.urls import path
from . import views


urlpatterns = [
    path("users", views.create_user),
    path("users/<int:user_id>", views.get_user),
]

这里使用 csrf_exempt 只是为了让独立 JSON Demo 可以直接调用。

生产环境如果使用 Cookie / Session 登录,不能看到 CSRF 报错就顺手把所有 API 的 CSRF 防护关掉。

更关键的问题是:纯 Django 并没有把 REST API 请求模型、序列化、统一验证当作核心开发模型。

因此真正的大型 Django API 项目,通常会继续引入 Django REST Framework、Django Ninja 等 API 层。

这不是 Django 做不到。

而是它的核心抽象从一开始就不是“API Schema”。

Flask 实现

from flask import Flask, jsonify, request

app = Flask(__name__)

users = {}
next_id = 1


@app.post("/users")
def create_user():
    global next_id

    data = request.get_json(silent=True)

    if data is None:
        return jsonify({
            "message": "Invalid JSON"
        }), 400

    name = data.get("name")
    age = data.get("age")

    if not isinstance(name, str) or not name:
        return jsonify({
            "message": "Invalid name"
        }), 400

    if not isinstance(age, int) or age < 0:
        return jsonify({
            "message": "Invalid age"
        }), 400

    user = {
        "id": next_id,
        "name": name,
        "age": age
    }

    users[next_id] = user
    next_id += 1

    return jsonify(user), 201


@app.get("/users/<int:user_id>")
def get_user(user_id):
    user = users.get(user_id)

    if user is None:
        return jsonify({
            "message": "User not found"
        }), 404

    return jsonify(user)

相比 Django,Flask 少了项目级结构,但参数验证仍然需要自己解决。

当然,可以继续安装 Pydantic:

pip install pydantic

也可以安装 Marshmallow。

问题就在这里。

Flask 的答案经常是:

“你想怎么做都可以。”

这句话既是它最大的优点,也是大型项目最大的风险。

FastAPI 实现

from fastapi import FastAPI, HTTPException, status
from pydantic import BaseModel, Field

app = FastAPI()

users = {}
next_id = 1


class UserCreate(BaseModel):
    name: str = Field(min_length=1, max_length=50)
    age: int = Field(ge=0, le=150)


class UserResponse(UserCreate):
    id: int


@app.post(
    "/users",
    response_model=UserResponse,
    status_code=status.HTTP_201_CREATED
)
async def create_user(user: UserCreate):
    global next_id

    result = UserResponse(
        id=next_id,
        name=user.name,
        age=user.age
    )

    users[next_id] = result
    next_id += 1

    return result


@app.get(
    "/users/{user_id}",
    response_model=UserResponse
)
async def get_user(user_id: int):
    user = users.get(user_id)

    if user is None:
        raise HTTPException(
            status_code=404,
            detail="User not found"
        )

    return user

这里已经同时定义了:

请求模型
响应模型
字段限制
HTTP 状态码
路径参数类型
错误状态
OpenAPI Schema
Swagger 文档

这就是为什么纯 API 项目用 FastAPI 往往会感觉明显顺手。

不是因为装饰器比 Flask 高级。

而是框架把 API 开发中最常重复的那部分工作直接变成了一等公民。

真正拉开差距的是 async,而不是 async def 三个字

现在三个框架都能看到 async def,所以很容易产生一个错误判断:

都支持 async,那异步能力应该差不多。

实际上差别很大。

Flask 的 async 并没有改变它的 WSGI 核心

Flask 3.1 可以写:

@app.get("/data")
async def get_data():
    result = await query_remote_api()
    return result

但 Flask 官方文档明确说明:作为 WSGI 应用,一个 worker 在处理 async view 时仍然负责一个 request/response cycle。

也就是说,async 可以帮助一个请求内部并发等待多个 I/O,但并不会把 Flask 自动变成 ASGI 异步服务器。

例如:

async def get_data():
    a, b = await asyncio.gather(
        request_service_a(),
        request_service_b()
    )

这种场景有价值。

但如果你的目标是 WebSocket、大量长连接或者整个服务链路都是异步 I/O,Flask 就不是最自然的选择。

FastAPI 从底层就是 ASGI 模型

FastAPI 基于 Starlette,通常配合 Uvicorn 等 ASGI Server。

如果数据库驱动、Redis、HTTP Client 都支持异步:

@app.get("/dashboard")
async def dashboard():
    user = await query_user()
    orders = await query_orders()

    return {
        "user": user,
        "orders": orders
    }

请求等待数据库的时候,Event Loop 可以继续处理其他连接。

FastAPI 还允许:

def

和:

async def

同时存在。

普通 def 路由会进入线程池执行,而异步路由直接运行在异步调用链中。

这里有一个非常常见的坑:

@app.get("/users")
async def users():
    result = requests.get("https://example.com")
    return result.json()

代码虽然写了:

async def

requests.get() 是阻塞调用。

Event Loop 还是会被卡住。

应该使用真正的异步客户端,例如:

import httpx


@app.get("/users")
async def users():
    async with httpx.AsyncClient() as client:
        response = await client.get(
            "https://example.com"
        )

    return response.json()

异步性能来自整条调用链,而不是函数前面的 async

这个问题比选 Django、Flask 还是 FastAPI 本身更容易导致线上性能异常。

Django 的异步能力已经比很多旧文章描述得完整

现在再说“Django 只能同步”已经不准确。

Django 6.1 支持 ASGI,View 可以写成:

async def user_view(request):
    ...

ORM 也已经提供大量异步接口,例如:

user = await User.objects.aget(id=1)

await User.objects.acreate(
    name="Tom"
)

以及:

async for user in User.objects.filter(active=True):
    ...

缓存、认证、Session、Signals 等多个组件也已经拥有异步 API。

不过 Django 当前的异步体系仍然有边界。

例如异步模式下数据库事务还不能完全按照同步 ORM 的方式直接使用,官方建议把需要事务的代码封装成同步函数,再通过 sync_to_async() 调用。异步模式下还需要特别关注同步 Middleware,因为同步和异步栈之间发生适配会增加额外成本。

所以现在更准确的描述应该是:

Flask
支持在 WSGI 模型中使用 async

Django
同时支持传统同步体系和逐渐完整的 ASGI 异步体系

FastAPI
从设计开始就是 API + ASGI + async-first

不要把 FastAPI 的高性能理解成“换框架就能让系统变快”

如果只测试:

@app.get("/")
async def hello():
    return {"hello": "world"}

FastAPI 通常会表现得非常漂亮。

官方也引用了 TechEmpower 等基准结果说明 FastAPI/Uvicorn 在 Python Web 框架中具有很强的性能表现。

但生产接口往往长这样:

HTTP Request
     ↓
JWT
     ↓
Redis
     ↓
MySQL
     ↓
业务计算
     ↓
RPC
     ↓
JSON Serialize

假设:

框架处理耗时:0.5 ms
SQL 查询耗时:30 ms
RPC 调用耗时:50 ms

你把框架优化快一倍,可能只省了:

0.25 ms

把 SQL 从 30 ms 优化到 5 ms,却直接省了:

25 ms

所以对于普通 CRUD 系统:

ORM 查询方式、索引、连接池、缓存、N+1 查询和远程调用,往往比框架 Benchmark 更值得关注。

FastAPI 真正明显的性能优势,更多体现在高 I/O 并发以及大量连接同时等待数据库、Redis、RPC、LLM API 等场景。

CPU 密集型任务,三个框架都救不了你

例如:

@app.post("/generate")
async def generate():
    result = run_heavy_cpu_task()
    return result

假设 run_heavy_cpu_task() 是:

视频编码
大型 Excel 运算
机器学习推理
图片处理
复杂数据计算

即使换成 FastAPI,也不会因为用了 async 就突然得到 CPU 并行能力。

CPU 密集任务通常要考虑:

多进程
Celery
RQ
独立 Worker
GPU Worker
任务队列
独立推理服务

不要拿异步并发解决 CPU 并行问题。

这是另外一套问题。

ORM:Django 的优势非常明显

如果项目数据库逻辑很重,Django ORM 是 Django 很重要的竞争力。

比如:

users = (
    User.objects
    .filter(active=True)
    .select_related("profile")
    .prefetch_related("roles")
    .order_by("-created_at")
)

Migration 同样已经集成:

python manage.py makemigrations
python manage.py migrate

开发者不需要额外决定 ORM 和 Migration 体系。

Flask 和 FastAPI 则通常需要自行组合:

SQLAlchemy
+
Alembic

例如:

from sqlalchemy.orm import DeclarativeBase


class Base(DeclarativeBase):
    pass

然后配置:

engine
session
repository
migration
connection pool

FastAPI 官方没有强制绑定某个 ORM。

这其实是合理的,因为它定位就是 API 框架,而不是 Django 那种完整业务平台。

但也意味着:

FastAPI 项目代码短,不代表完整后端系统代码一定少。

等你把数据库、Migration、Redis、权限、日志、配置、后台任务和 Admin 都装进去,两者的工程规模差异就没有 Hello World 看起来那么夸张。

Admin 是一个经常被低估的 Django 优势

假设现在产品说:

给运营做个后台,可以查询用户、修改状态、封禁账号、看订单。

Django 很可能是:

@admin.register(User)
class UserAdmin(admin.ModelAdmin):
    list_display = [
        "id",
        "username",
        "status",
        "created_at"
    ]

    search_fields = [
        "username"
    ]

    list_filter = [
        "status"
    ]

很多内部运营需求就已经能用了。

Flask 和 FastAPI 如果没有预先接入 Admin 组件,通常意味着:

后台前端
+
后台 API
+
权限
+
搜索
+
分页
+
表单
+
数据校验

这可能直接变成一个独立项目。

所以如果一个系统天然需要大量:

运营后台
内容管理
用户管理
权限管理
数据录入
配置管理

Django 的竞争力会非常强。

只看 API QPS 会完全看错重点。

三种框架的大型项目结构应该怎么设计

Django

比较自然的方式是按业务 Domain 拆 App:

project/
├── config/
│   ├── settings.py
│   ├── urls.py
│   └── asgi.py
│
├── users/
│   ├── models.py
│   ├── services.py
│   ├── urls.py
│   └── views.py
│
├── orders/
│   ├── models.py
│   ├── services.py
│   ├── urls.py
│   └── views.py
│
└── payments/
    ├── models.py
    ├── services.py
    └── views.py

不要把所有业务都塞进:

views.py

Django 项目大了以后,真正应该控制的是 Model 和 View 不要无限膨胀。

复杂业务逻辑应该逐渐进入:

service
domain service
selector/query service

等独立层。

Flask

Flask 更依赖团队主动建立边界:

app/
├── __init__.py
├── extensions.py
├── config.py
│
├── users/
│   ├── routes.py
│   ├── service.py
│   ├── model.py
│   └── schema.py
│
├── orders/
│   ├── routes.py
│   ├── service.py
│   ├── model.py
│   └── schema.py
│
└── common/

一个成熟 Flask 项目不能真的按照 Hello World 的方式一直扩展。

FastAPI

FastAPI 很容易按 Router + Schema + Service 组织:

app/
├── main.py
├── core/
│   ├── config.py
│   └── security.py
│
├── db/
│   ├── session.py
│   └── models.py
│
├── users/
│   ├── router.py
│   ├── schema.py
│   ├── service.py
│   └── repository.py
│
└── orders/
    ├── router.py
    ├── schema.py
    ├── service.py
    └── repository.py

路由:

router = APIRouter(
    prefix="/users",
    tags=["users"]
)

最后:

app.include_router(user_router)
app.include_router(order_router)

这种结构对微服务和 API 项目比较自然。

FastAPI 的依赖注入比很多人想象得更重要

例如数据库 Session:

from fastapi import Depends


def get_db():
    db = SessionLocal()

    try:
        yield db
    finally:
        db.close()


@app.get("/users/{user_id}")
def get_user(
    user_id: int,
    db=Depends(get_db)
):
    ...

认证也可以变成依赖:

def get_current_user():
    ...


@app.get("/profile")
def profile(
    user=Depends(get_current_user)
):
    return user

继续组合:

Route
  ↓
Permission
  ↓
Current User
  ↓
Token
  ↓
Database Session

FastAPI 会解析整个依赖关系。

相比到处手动写:

check_token()
check_permission()
get_db()

这种方式更适合 API 层的横切逻辑。

FastAPI 官方也把 Dependency Injection 作为核心能力之一,而不是附加插件。

到底什么时候选 Django?

如果项目符合下面几项:

关系型数据库业务很多
需要 Admin
需要用户权限
需要 Session
需要后台页面
模块非常多
生命周期很长
团队成员较多

Django 通常是最省工程成本的选择。

典型系统包括:

CMS
小说/内容平台
ERP
CRM
电商后台
教育平台
运营系统
传统 SaaS

这种项目真正昂贵的是业务复杂度,而不是 HTTP 框架的几百微秒。

如果是长期稳定运行的企业项目,Django 5.2 LTS 甚至可能比刚发布的 6.1 更适合作为版本基线;如果希望使用 6.1 的新能力并且第三方包兼容性已经确认,再选择 6.1。

什么时候选 Flask?

Flask 更适合需求边界清楚的小型服务。

例如:

Webhook 接收器
内部 API
小型后台
数据查询接口
简单微服务
已有 WSGI 系统扩展
脚本 Web 化

尤其当服务主要是同步代码,而且团队已经有成熟的:

SQLAlchemy
Alembic
认证
配置
日志
项目模板

Flask 依然非常好用。

但不要因为项目现在只有五个接口,就自动认为 Flask 最合适。

小项目变成大项目以后,Flask 不会突然替你补上工程规范。

这个成本要提前算。

什么时候选 FastAPI?

如果项目天然就是:

API First

FastAPI 往往是三个框架里最自然的。

尤其适合:

REST API
微服务
API Gateway
AI / LLM 服务
模型推理 API
高并发 I/O 服务
内部服务接口
前后端分离项目

例如一个 AI 接口需要同时访问:

Redis
用户服务
模型服务
向量数据库
第三方 LLM API

这些操作大部分都在等待网络 I/O。

这种情况下:

asyncio.gather(...)

配合真正异步的客户端和数据库驱动,可以很好地发挥 ASGI 并发模型。

而类型系统 + Pydantic + OpenAPI 也特别适合前后端或者多个微服务之间约定 API Contract。

一个简单的选型决策树

可以直接按下面的逻辑判断:

项目是否需要大量后台管理、ORM、权限和传统 Web 能力?
                │
          ┌─────┴─────┐
          │           │
         是           否
          │           │
       Django      是否 API First?
                      │
                ┌─────┴─────┐
                │           │
               是           否
                │           │
             FastAPI     服务是否很小,
                        并且主要是同步逻辑?
                             │
                       ┌─────┴─────┐
                       │           │
                      是           否
                       │           │
                    Flask      再看具体架构

如果现在让我重新做一个 Python 后端

如果是一个纯 REST API,我会优先考虑:

FastAPI
+
Pydantic
+
SQLAlchemy
+
Alembic
+
PostgreSQL / MySQL
+
Redis

如果是一个有大量运营后台、用户体系和复杂关系数据的平台,我会优先考虑:

Django
+
Django ORM
+
Django Admin
+
PostgreSQL / MySQL
+
Redis

如果只是一个十几个接口的小服务、Webhook 或已有同步 Python 系统的补充模块:

Flask

通常已经足够。

这里没有“FastAPI 一定比 Django 新,所以一定更好”这种结论。

FastAPI 把 API 开发做得非常舒服,但它不会自动给你一个 Django Admin,也不会替你建立完整业务系统。

Django 看起来重,但当一个项目本来就需要它提供的大部分功能时,所谓的“重”其实是已经替你写好的基础设施。

Flask 则处在中间一个很特殊的位置:框架本身极其克制,你可以把它构造成任何样子,但项目最终是否优雅,更多取决于团队,而不是 Flask。

选框架时真正应该问的不是:

谁的 Benchmark QPS 最高?

而应该问:

我们这个系统两年以后,最大的复杂度会在哪里?

如果答案是业务、权限、后台和数据模型,偏向 Django。

如果答案是 API Contract 和异步 I/O,偏向 FastAPI。

如果系统本来就很小,而且你明确知道自己需要哪些组件,Flask 仍然是非常干净的选择。

这比单纯比较三段 Hello World 有意义得多。

参考资料

  • Django 6.1 于 2026 年 8 月发布,当前 PyPI 稳定版本信息及 Python 要求。
  • Django 5.2 为 LTS 版本。
  • Django 6.1 异步请求栈、异步 ORM 及当前事务限制。
  • Flask 3.1.3 版本及 Python 要求。
  • Flask 官方关于 async view、WSGI worker 与后台任务的说明。
  • FastAPI 0.141.1 当前版本信息以及 Starlette、Pydantic、OpenAPI、Swagger UI 等核心能力。
  • FastAPI 官方 async / await 工作机制说明。
正文到此结束
评论插件初始化中...
Loading...