flask.g
......从Flask 0.10开始,它存储在应用程序中 上下文,不再是请求上下文,这意味着它成为 如果只有应用程序上下文绑定而不是a 请求
据我所知,当请求到来时,如果没有请求,将创建应用程序上下文。所以在请求到来后flask.g
不应该可用,因为请求确保了应用程序上下文的存在?
作为一个问题:我为什么要在g
而不是request
上存储数据库连接?我知道创建一个应用程序上下文比创建一个请求上下文更“昂贵”,但是当一个请求到来时,无论如何都会创建一个请求上下文。
答案 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对象中以便于访问它(它不好,但访问速度快且易于使用)