这是两个 Python Web 框架:Flask 和 FastAPI 。虽然它们都用于构建 Web 应用(特别是 REST API),但它们之间在设计理念、性能、功能支持等方面有明显的区别。
app = Flask(__name__)
和 app = FastAPI()
各自的含义、联系与区别。**
🔹一、app = Flask(__name__)
是什么意思?
这是 Flask 中创建一个 Web 应用的标准写法:
python
from flask import Flask
app = Flask(__name__)
含义解释:
Flask
是一个类,用来创建 Flask 应用实例。__name__
是一个 Python 内置变量,表示当前模块的名字。- 如果你直接运行这个脚本,
__name__ == '__main__'
- 如果这个文件被另一个模块导入,
__name__
就是这个模块的名字。
- 如果你直接运行这个脚本,
Flask(__name__)
会根据传入的模块名来确定应用的根路径,从而帮助定位静态文件、模板文件等。
🔹二、app = FastAPI()
是什么意思?
这是 FastAPI 框架中创建应用实例的写法:
python
from fastapi import FastAPI
app = FastAPI()
含义解释:
FastAPI
是 FastAPI 框架中的核心类,用于创建 Web 应用。- 它不需要传入
__name__
,因为 FastAPI 默认不依赖这个来确定根路径(不像 Flask 依赖__name__
来定位templates/
和static/
目录)。
🔹三、二者的联系
项目 | Flask | FastAPI |
---|---|---|
同类产品 | ✅ 都是 Python Web 框架 | ✅ |
应用定义方式 | app = Flask(__name__) |
app = FastAPI() |
路由机制 | 使用 @app.route() 装饰器注册视图函数 |
使用 @app.get() 、@app.post() 等 |
用途 | 轻量级 API、网页、表单处理等 | 高性能 REST API、现代后端服务 |
WSGI/ASGI | 基于 WSGI(同步) | 基于 ASGI(支持异步) |
🔹四、二者的主要区别(通俗+举例)
维度 | Flask | FastAPI |
---|---|---|
🚀 性能 | 较慢(同步) | 更快(异步,基于 Starlette 和 Pydantic) |
⌛ 异步支持 | 原生不支持 async/await(需额外库) | 原生支持 async/await |
📃 自动文档 | ❌ 无自动文档(需手动集成 Swagger) | ✅ 自动生成 Swagger 和 ReDoc 文档 |
🧾 类型检查 | ❌ 不支持自动类型检查 | ✅ 支持 Python 类型注解,自动校验请求/响应 |
📦 依赖注入 | ❌ 不支持 | ✅ 内置支持 |
🧪 开发体验 | 较传统 | 更现代、自动提示强、IDE 支持好 |
🧱 数据验证 | 手动写校验逻辑 | 自动使用 pydantic 校验数据 |
💬 举例说明 | 传统建表单网页或小型 API | 构建高性能、结构清晰的大型 API 项目 |
✅ 举个例子(定义一个 /hello
接口):
Flask:
python
from flask import Flask
app = Flask(__name__)
@app.route("/hello")
def hello():
return "Hello from Flask!"
FastAPI:
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/hello")
def hello():
return {"message": "Hello from FastAPI!"}
📌 FastAPI 自动生成接口文档:
访问
http://127.0.0.1:8000/docs
就能看到 Swagger UI!
🔹五、总结一句话区别
Flask
是一个经典的、轻量的 Web 框架,更适合构建传统网站或小型 API。FastAPI
是一个现代化的高性能 API 框架,更适合构建大型、异步、高并发的服务,尤其适合人工智能、微服务等应用场景。