Flask核心原理是路由分发、请求上下文、响应构建三部分:路由由Werkzeug匹配树实现动态解析与类型转换;上下文通过LocalStack保障request/session/g线程安全;响应经make_response统一封装并支持自定义与流式返回。
Flask 的核心原理其实就三点:路由分发、请求上下文、响应构建。它不像 Django 那样“大而全”,而是靠精巧的设计把 Web 开发的主干逻辑拎得特别清楚。学懂这三块,你写出来的不只是“能跑的代码”,而是“知道为什么这么写”的应用。
Flask 的 @app.route() 看似只是绑定 URL 和函数,背后其实是 Werkzeug 的 Map 和 Rule 在做匹配。每次请求进来,Werkzeug 会根据所有注册的 Rule 构建一棵匹配树,再用 HTTP 方法 + 路径做快速查找。
/user/,Flask 会在匹配后自动类型转换,失败则直接 404 —— 这是 Werkzeug 的 Converter 在起作用add_url_rule() 手动注册,比装饰器更灵活,适合插件或运行时动态加载路由methods=['GET', 'POST'] 显式声明Flask 没有真正意义上的全局变量。reques 看起来像全局,实则是通过 Python 的
tLocalStack + 线程/协程局部存储实现的。每个请求进来,Flask 自动 push 一个 RequestContext,里面封装了 request、session、g 等对象。
g 是一次请求生命周期内的临时容器,适合存数据库连接、用户权限等中间态数据session 默认基于签名 Cookie,不依赖服务端存储;想换 Redis 或数据库后端,只需继承 SessionInterface
contextvars,底层适配已做好,开发者无需重写逻辑你写 return "Hello"、return jsonify(...) 或 return render_template(...),Flask 都会统一走 make_response() 流程。这个函数判断返回值类型,自动包装成 Response 对象,设置默认状态码、Content-Type 等。
Response 实例,或用 make_response() 包装字符串/字典Transfer-Encoding: chunked
@app.errorhandler(404) 注册专用响应函数,保持关注点分离掌握这些,再配合一个真实小项目(比如带登录态的备忘录 API + 管理页),你就不再是在“调用 Flask”,而是在“驾驭它的设计哲学”。