提问者:小点点

为什么我不能在请求后使用flaskg?


根据烧瓶0.12文档:

flask. g

...... 从Flask 0.10开始,它存储在应用程序上下文中,而不再存储在请求上下文中,这意味着只有应用程序上下文被绑定而不是请求时,它才可用。

据我所知,当一个请求出现时,如果没有应用程序上下文,就会创建一个应用程序上下文。所以不应该烧瓶。g请求发出后是否可用,因为请求确保存在应用程序上下文?

作为一个bouns问题:为什么我应该将数据库连接存储在g而不是request?我知道创建一个应用程序上下文比创建一个请求上下文要“便宜”,但是当一个请求出现时,无论如何都会创建一个请求上下文。


共3个答案

匿名用户

那里的措辞有点尴尬。g对象在请求期间也是可用的。请求上下文嵌套在应用程序上下文中。

您应该将数据库连接存储在g对象中,因为即使没有请求,例如在flask shell命令和任何自定义命令行命令中,数据库连接也是可用的。例如,在初始化数据库时,您将需要这个。

接下来,还有一些高级用例,您可能希望创建一个“内部”请求,在Flask应用程序上调用另一个路由,就好像它来自外部一样。此嵌套请求将重新使用现有的应用程序上下文。

没有应用程序上下文,就没有请求上下文。

匿名用户

回答Flask文档中的奖金问题:

例如,request变量是与当前请求关联的请求对象,而g是与当前应用程序上下文关联的通用变量。

匿名用户

flask. g绑定到当前请求的会话。这意味着对于不同的请求有不同的g。例如,我将一个用户存储在g对象中,以便更容易访问它(这不好,但访问速度快,易于使用)