
当我们谈及 Python Web 服务端开发时,FastAPI、Flask、Django 几乎是每位工程师绕不开的三巨头。
但实际上,Python 的后端框架生态远比你想象中丰富:
如果你正在做 API 设计、微服务架构、测试平台、实时服务,本文将帮助你全面认识 Python Web 框架的全景生态,并给出清晰的选型建议。
┌───────────────────────┐
│ Fullstack 全家桶框架 │
└───────────────────────┘
│
┌────────────────┴─────────────────┐
│ │
Django Pyramid
─────────────────────────────────────────────────────
┌───────────────────────┐
│ Minimal 轻量级框架 │
└───────────────────────┘
│
┌──────────────┴───────────────┐
│ │
Flask Bottle
─────────────────────────────────────────────────────
┌───────────────────────┐
│ High Performance 高性能│
└───────────────────────┘
│
┌──────────────────┼─────────────────────────┐
│ │ │
FastAPI Sanic Falcon
─────────────────────────────────────────────────────
┌───────────────────────┐
│ Async 异步架构框架 │
└───────────────────────┘
│
┌────────────────┼─────────────────┐
│ │ │
Aiohttp Tornado FastAPI
Python Web 框架的发展,从来都不是“谁火用谁”,而是针对不同场景:
场景 | 典型需求 | 对应框架 |
|---|---|---|
业务系统(中后台) | ORM / 模型 / 管理后台 / 权限 | Django |
轻量快速开发 | 灵活、定制度高、自由组织目录 | Flask、Bottle |
实时服务 | WebSocket、高并发、长连接 | Tornado、Sanic |
高性能 API | 高 QPS、低延迟 | Sanic、FastAPI、Falcon |
微服务 | 自动文档、依赖注入、异步 | FastAPI |
网络网关 / 中间层 | 高度可定制、低层网络协议 | Aiohttp |
所以:不同框架=解决不同的工程化诉求。 没有最强,只有最适合业务的。
特点
适用场景
缺点
特点
适用场景
缺点
特点
适用场景
特点
适用场景
特点
适用场景
特点
特点
(已多年未大更新,不推荐用于大型项目)
特点:简洁、经典,但较老旧 用途:教学、简单工具 API
场景 | 推荐框架 | 原因 |
|---|---|---|
日常 Web 服务 / API | FastAPI | 易维护、性能好、文档自动化 |
中后台系统 / 完整业务 | Django | ORM、Admin、权限体系齐全 |
工具型服务 | Flask / Bottle | 小轻快自由 |
高并发 API | Sanic / FastAPI | 异步性能优秀 |
WebSocket | Tornado / Sanic | 长连接强项 |
微服务 | FastAPI | 生态完善 |
自定义协议 / 网络层 | Aiohttp | 灵活、底层友好 |
企业级 REST | Falcon | 稳定可靠 |
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
async def health():
return {"status": "ok"}
@app.get("/hello")
async def hello(name: str = "Python"):
return {"message": f"Hello, {name}!"}
启动:
uvicorn main:app --reload
from sanic import Sanicfrom
sanic.response import json
app = Sanic("demo")
@app.get("/health")
async def health(request):
return json({"status": "ok"})
@app.get("/hello")
async def hello(request):
return json({"message": "Hello, Sanic!"})
app.run(host="0.0.0.0", port=8000)
import tornado.web
import tornado.websocket
import tornado.ioloop
class Health(tornado.web.RequestHandler):
def get(self):
self.write({"status": "ok"})
class WS(tornado.websocket.WebSocketHandler):
def on_message(self, msg):
self.write_message(f"received: {msg}")
app = tornado.web.Application([
(r"/health", Health),
(r"/ws", WS)])
app.listen(8000)
tornado.ioloop.IOLoop.current().start()
可以看到,Python 的 Web 生态既有:
也意味着 Python 语言正在覆盖从“业务系统”到“高性能网络服务”的完整链路。
对工程师而言,掌握一套适合自己的框架体系,比什么都重要。