全书目录

第二十九篇:Flask 完全指南 —— 轻骑兵微服务街区宇宙

第十章:别在请求里改地图 —— Flask 的 setup 阶段和运行阶段必须分清

1 分钟 310 字 第 527 / 962 个阅读单元

Flask 官方生命周期文档强调得非常直接:

应用的 setup 必须在处理第一个请求之前完成。

也就是说,下面这些事应该在应用装配期做完:

  • 注册路由
  • 注册 Blueprint
  • 加载配置
  • 初始化扩展
  • 配置 Jinja
  • 配置 session / JSON provider / middleware

不要在请求处理中再去临时改这些东西。

错误示意:

py
@app.get("/bad")
def bad():
    @app.get("/new-route")
    def new_route():
        return "too late"
    return "wrong"

为什么不行?

因为 WSGI 服务器可能已经把请求分给多个 worker 了。 你在某个请求里偷偷改地图,别的 worker 根本不一定同步。

把这个原则翻译成街区语言就是:

街区道路、岗哨、军令、外援编制,必须在开营前定好。 战斗进行中别一边接待来访,一边重画城市地图。