请求到来后为什么我不能使用flask.g?

时间:2017-07-18 07:58:44

标签: python flask

根据the Flask 0.12 docs

  

flask.g

     

......从Flask 0.10开始,它存储在应用程序中   上下文,不再是请求上下文,这意味着它成为   如果只有应用程序上下文绑定而不是a   请求

据我所知,当请求到来时,如果没有请求,将创建应用程序上下文。所以在请求到来后flask.g不应该可用,因为请求确保了应用程序上下文的存在?

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

3 个答案:

答案 0 :(得分:3)

措辞有点尴尬。 {<1}}对象在请求以及期间可用。请求上下文嵌套在应用程序上下文中。

您应该在.then(res => { this.props.history.push('/fetchdata'); }); 对象中存储数据库连接,因为即使没有请求(例如在flask shell命令中)和任何custom command-line commands,它也可用*。例如,在初始化数据库时,您需要这样做。

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

没有应用程序上下文,永远不会有请求上下文。

答案 1 :(得分:2)

request documentation回答红利问题:

  

例如,g变量是关联的请求对象   使用当前请求,而ifstream inFile; ofstream outFile; string line; while (getline(inFile, line)) // reads the line { //remove everything after %% size_t percentIdx = line.find("%%"); string lineWithoutComment = line.substr(0, percentIdx); //if the line is not empty, send everything before that to the outFile if (! lineWithoutComment.empty()) { outFile << lineWithoutComment << endl; } } 是通用变量   与当前的应用程序上下文相关联。

答案 2 :(得分:0)

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