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 灵活轻量,适合小型服务、原型项目和自定义程度高的项目。


 

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐