Flask 最容易让新手又爱又怕的,是这几个对象:
requestsessioncurrent_appg
它们看起来像随处可拿的全局变量,但本质不是普通全局变量。
你可以把它理解成:
每个请求都有一位专属信使
│
├── request = 这位信使带来的资料袋
├── session = 这个访客的通行腰牌记录
├── current_app = 当前正在值勤的街区军旗
└── g = 本次任务的临时鞍袋请求一来,Flask 会推入两层上下文:
Request Context -> 让 request / session 可用
App Context -> 让 current_app / g 可用请求一结束,这两层上下文就会被弹出。
所以你才会看到那个经典错误:
RuntimeError: Working outside of request context.
RuntimeError: Working outside of application context.这句话翻译成人话就是:
你现在不在一次有效巡逻任务里,别乱拿这次任务的信使袋和鞍袋。