FastAPI
FastAPI、Django、Flask
- 重型企业级全栈项目,选Django(自带admin后台)
- 纯API服务且追求极致性能,选FastAPI
- 轻量灵活、需要高度定制或做胶水层,选Flask
核心架构与性能
| 对比维度 |
Django |
FastAPI |
Flask |
| 框架定位 |
全栈重量级(内置一切) |
API专用轻量级(极致性能) |
微内核核心(高度自由) |
| 接口协议 |
WSGI(原生) ASGI(实验性,支持不佳) |
ASGI(底层Starlette,原生异步) |
WSGI(原生) async仅为语法糖,底层不变 |
| 并发模型 |
同步阻塞(多进程/多线程) |
事件循环(单线程异步非阻塞) |
同步阻塞(多线程,受限于GIL) |
| 基准性能 |
中等(较重,启动慢) |
最高(I/O密集场景领先2~3倍) |
中等(轻量启动快,但并发能力弱) |
WSGI/ASGI
- WSGI: 标准的通信协议,同步阻塞;适合CPU密集型业务,但高并发下线程开销极大。
- ASGI: 异步非阻塞 + 事件循环,使单个线程可撑起大量并发;使Python拥有Node.js/Go那样的高并发能力,适合IO密集型(调数据库、调第三方API)的微服务。
- 语法糖: 让代码写起来更爽、读起来更优雅的简化写法,没有改变底层逻辑。
- 胶水层: 适配转换头,用来做协议转换、数据清洗、路由转发等。
开发体验与生态
| 对比维度 |
Django |
FastAPI |
Flask |
| 开箱即用程度 |
极高(内置Auth、表单、中间件) |
中等(自带校验和文档,缺ORM/鉴权) |
极低(仅路由和模板,其余全手搭) |
| API文档生成 |
需集成drf-yasg等第三方库 |
自动生成Swagger/OpenAPI(零配置) |
需集成Flask-RESTX等第三方库 |
| ORM与数据库 |
强绑定自带ORM(自动迁移,跨库) |
无绑定(常配SQLAlchemy异步/SQLModel) |
无绑定(社区标配Flask-SQLAlchemy) |
| 灵活性(自由度) |
极低(Django生态强约束) |
较高(组件可自由组装) |
最高(每个组件都可随意替换) |
| 实现同等API代码量 |
最少 |
适中 |
最多(需手动处理序列化/校验) |
适用场景与选型决策
| 应用场景 |
首选框架 |
核心理由(面试话术) |
| 复杂ERP、电商主站、OA系统 |
Django |
Admin后台是杀手锏,内置功能避免造轮子,长期维护成本最低。 |
| 高并发对外API、微服务网关、ML模型部署 |
FastAPI |
异步高性能 + 自动生成API文档 + 类型安全(Pydantic),前后端联调极快。 |
| 轻量级单体服务、快速原型验证、物联网网关 |
Flask |
资源占用极低,启动速度最快,且侵入性最小,适合做胶水层。 |
| 遗留系统改造或中间件(BFF)层 |
Flask |
代码透明,极易与老旧同步代码集成,改造成本最低。 |
高阶陷阱与认知深度
| 高阶知识点 |
Django / Flask(同步阵营) |
FastAPI(异步阵营) |
| 异步的真实性 |
异步支持基本是语法糖,底层Worker仍是同步阻塞,无法突破GIL。 |
原生异步,但必须搭配asyncpg或异步ORM才能发挥威力。 |
| 常见的性能陷阱 |
并发量受限于线程池大小,调高线程数会导致上下文切换开销剧增。 |
若误用了同步阻塞的SQLAlchemy或未配置数据库连接池,性能会直接退化到Flask水平。 |
SQLAlchemy 2.0 支持同步和异步两种方式: psycopg2(同步阻塞)、asyncpg(异步非阻塞)。