Python 后端基础(十四):Flask 核心知识讲清楚,轻量框架、蓝图、扩展生态和项目结构
Flask 是 Python 里非常经典的轻量 Web 框架。
它不像 Django 那样把很多东西都内置好,而是给你一个小核心,其他能力通过扩展组合起来。正因为轻,所以适合学习 Web 原理、小型项目、接口服务和快速原型。
【一、Flask 是什么】
最小 Flask 应用:
```python
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return {"message": "hello flask"}
启动后,访问 `/` 就会返回 JSON。
Flask 的特点:
- 上手简单。
- 核心很轻。
- 扩展生态丰富。
- 灵活度高。
- 适合理解 Web 框架底层思路。
【二、Flask 和 Django、FastAPI 的区别】
简单对比:
Flask:轻量灵活,很多东西自己选
Django:功能完整,全家桶
FastAPI:现代 API 框架,类型提示和接口文档强
如果你做后台管理系统,Django 很方便。
如果你做 AI API 服务,FastAPI 更常用。
如果你想理解 Web 框架和快速搭接口,Flask 很适合。
【三、路由和请求】
from flask import Flask, request
app = Flask(__name__)
@app.route("/login", methods=["POST"])
def login():
data = request.get_json()
username = data.get("username")
password = data.get("password")
return {"username": username}
Flask 通过 `request` 对象获取请求数据。
常见来源:
- `request.args`:查询参数。
- `request.form`:表单数据。
- `request.get_json()`:JSON 请求体。
- `request.headers`:请求头。
【四、蓝图是什么】
项目大了以后,不能把所有路由写在一个文件。
蓝图 Blueprint 用来拆分模块。
from flask import Blueprint
user_bp = Blueprint("user", __name__, url_prefix="/users")
@user_bp.route("/<int:user_id>")
def user_detail(user_id):
return {"id": user_id}
注册:
app.register_blueprint(user_bp)
这样用户模块、订单模块、文章模块可以分开维护。
【五、常见扩展】
Flask 核心轻,很多能力靠扩展:
- Flask-SQLAlchemy:数据库 ORM。
- Flask-Migrate:数据库迁移。
- Flask-JWT-Extended:JWT 鉴权。
- Flask-Login:登录会话。
- Flask-Caching:缓存。
- Flask-CORS:跨域。
这也是 Flask 的特点:你可以按项目需要自由组合。
【六、项目结构】
一个稍微规范的 Flask 项目:
app/
__init__.py
config.py
extensions.py
models/
routes/
user.py
auth.py
services/
repositories/
run.py
`__init__.py` 里创建 app:
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
register_blueprints(app)
return app
这叫应用工厂模式,适合测试和多环境配置。
【七、Flask 中间件和钩子】
Flask 常用请求钩子:
@app.before_request
def before():
pass
@app.after_request
def after(response):
return response
可以做:
- 请求日志。
- 登录校验。
- 接口耗时统计。
- 设置响应头。
【八、常见坑】
- 项目小还好,项目大了不拆蓝图。
- 配置写死,不区分开发、测试、生产环境。
- 不使用应用工厂,测试很难写。
- SQLAlchemy session 管理混乱。
- Flask 自带开发服务器直接用于生产。
- 对 Flask 的轻量理解成“随便写”。
【九、面试常问】
1. Flask 为什么叫轻量框架?
Flask 核心只提供路由、请求响应等基础能力,数据库、认证、缓存、迁移等功能通常通过扩展完成,因此更灵活也更轻量。
2. Blueprint 有什么作用?
Blueprint 用来按模块组织路由,避免所有接口堆在一个文件里。比如用户、订单、文章可以各自一个蓝图。
3. Flask 和 Django 怎么选?
Django 功能完整,适合后台管理和业务系统;Flask 灵活轻量,适合小型服务、原型项目和自定义程度高的项目。
更多推荐



所有评论(0)