Flask、Django与FastAPI

Flask、Django和FastAPI是当今三个主流python web框架。

1.Flask
轻量简单,只提供核心功能,其余通过拓展实现。

from flask import Flask, jsonify, request

app = Flask(__name__)

# 假设的博客文章数据
posts = [
    {"id": 1, "title": "Hello, Flask!", "content": "First post content"},
    {"id": 2, "title": "Flask is awesome", "content": "Content of the second post"}
]

@app.route('/posts', methods=['GET'])
def get_posts():
    return jsonify(posts)

@app.route('/post/<int:post_id>', methods=['GET'])
def get_post(post_id):
    post = next((post for post in posts if post['id'] == post_id), None)
    if post:
        return jsonify(post)
    else:
        return jsonify({"message": "Post not found"}), 404

if __name__ == '__main__':
    app.run(debug=True)

极简主义:核心代码仅数千行,学习曲线平缓
高度灵活:无强制项目结构,开发者自由组织代码
扩展丰富:SQLAlchemy、Flask-RESTful、Flask-JWT 等生态成熟
模板引擎:内置 Jinja2,前后端不分离场景友好

2.Django
设计理念:"自带电池"(Batteries Included),提供完整解决方案

这是电商平台的后端实现片段,这个例子展示了如何使用Django的模型来定义数据库结构,以及如何自动化地处理数据库操作。

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    stock = models.IntegerField()

class Order(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    quantity = models.IntegerField()
    created_at = models.DateTimeField(auto_now_add=True)

功能完备:ORM、Admin 后台、认证系统、表单处理、缓存、国际化一应俱全
安全内置:自动防护 CSRF、SQL 注入、XSS 等常见攻击
Admin 界面:自动生成管理后台,快速实现 CRUD 操作
约定优于配置:强制项目结构,团队协作规范统一

3.FastAPI
基于现代 Python 特性,极致性能与开发体验

from fastapi import FastAPI, Depends
from pydantic import BaseModel
import databases
import sqlalchemy

DATABASE_URL = "sqlite:///./test.db"
database = databases.Database(DATABASE_URL)
metadata = sqlalchemy.MetaData()

class Analysis(BaseModel):
    id: int
    data: str

app = FastAPI()

@app.on_event("startup")
async def startup():
    await database.connect()

@app.on_event("shutdown")
async def shutdown():
    await database.disconnect()

@app.post("/analyze/", response_model=Analysis)
async def create_analysis(analysis: Analysis):
    query = analysis_table.insert().values(data=analysis.data)
    last_record_id = await database.execute(query)
    return {**analysis.dict(), "id": last_record_id}

异步原生:基于 asyncio 和 Starlette,支持高并发
自动文档:基于 OpenAPI 自动生成 Swagger UI 和 ReDoc 交互文档
类型驱动:深度集成 Pydantic,请求/响应自动校验与序列化
性能卓越:媲美 Node.js 和 Go,是 Python 框架中最快之一

详细对比:

维度 Flask Django FastAPI
架构风格 微框架,自由灵活 全功能框架,约定优先 现代异步框架,类型驱动
学习曲线 平缓 较陡(概念多) 中等(需懂类型注解)
开发效率 中等(需自行组装组件) (开箱即用) (自动生成校验/文档)
运行性能 中等(WSGI 同步) 中等(WSGI 同步) 极高(ASGI 异步)
异步支持 需借助扩展(如 Flask 2.0+) Django 3.1+ 支持但不成熟 原生支持,设计核心
数据校验 手动或扩展(Marshmallow) Form/Model 表单验证 Pydantic 自动校验
API 文档 需扩展(Flask-RESTX 等) 需扩展(DRF) 自动生成 Swagger/ReDoc
数据库 ORM SQLAlchemy(灵活) Django ORM(功能全) SQLAlchemy/Tortoise(可选)
适用场景 中小型项目、微服务、原型 大型 CMS、电商、企业系统 高并发 API、微服务、ML 服务
社区生态 成熟稳定,资源丰富 最庞大,文档最完善 快速增长,现代项目首选

选择建议
1.选择 Flask 当:
项目规模小或需求简单,不想被框架束缚
需要高度定制化架构(如特殊数据库、非标准工作流)
团队熟悉微服务模式,习惯自行选择组件
快速原型开发,后期可能重构
2.选择 Django 当:
构建内容管理系统(CMS)、电商平台等复杂业务
需要快速交付,利用 Admin 后台减少重复开发
团队需要严格规范,降低协作成本
项目涉及大量表单处理、用户认证、权限管理
3.选择 FastAPI 当:
构建 RESTful API 或 微服务架构
需要处理 高并发 请求(如实时数据、WebSocket)
项目涉及 机器学习模型部署(与 NumPy/Pandas/TensorFlow 生态协同好)
重视 API 文档自动化 和 类型安全
团队熟悉现代 Python(类型注解、async/await)

posted @ 2026-04-11 16:05  mwhB  阅读(5)  评论(0)    收藏  举报