根据烧瓶0.12文档:
flask. g
...... 从Flask 0.10开始,它存储在应用程序上下文中,而不再存储在请求上下文中,这意味着只有应用程序上下文被绑定而不是请求时,它才可用。
据我所知,当一个请求出现时,如果没有应用程序上下文,就会创建一个应用程序上下文。所以不应该烧瓶。g
请求发出后是否可用,因为请求确保存在应用程序上下文?
作为一个bouns问题:为什么我应该将数据库连接存储在g
而不是request
?我知道创建一个应用程序上下文比创建一个请求上下文要“便宜”,但是当一个请求出现时,无论如何都会创建一个请求上下文。
那里的措辞有点尴尬。g
对象在请求期间也是可用的。请求上下文嵌套在应用程序上下文中。
您应该将数据库连接存储在g
对象中,因为即使没有请求,例如在flask shell
命令和任何自定义命令行命令中,数据库连接也是可用的。例如,在初始化数据库时,您将需要这个。
接下来,还有一些高级用例,您可能希望创建一个“内部”请求,在Flask应用程序上调用另一个路由,就好像它来自外部一样。此嵌套请求将重新使用现有的应用程序上下文。
没有应用程序上下文,就没有请求上下文。
回答Flask
文档中的奖金问题:
例如,request
变量是与当前请求关联的请求对象,而g
是与当前应用程序上下文关联的通用变量。
flask. g
绑定到当前请求的会话。这意味着对于不同的请求有不同的g
。例如,我将一个用户存储在g对象中,以便更容易访问它(这不好,但访问速度快,易于使用)