根據the Flask 0.12 docs:爲什麼在請求發出後不能使用flask.g?
flask.g
......從Flask 0.10這被存儲在應用程序上下文 和不再這意味着它請求上下文開始變得 可用如果只應用上下文綁定而不是 請求。
據我所知,當一個請求到來時,如果沒有一個應用程序上下文將被創建。因此,在請求到來之後,請不要flask.g
可用,因爲請求確保存在應用程序上下文?
作爲一個bouns問題:爲什麼我應該在g
而不是request
上存儲數據庫連接?我知道創建應用程序上下文比創建請求上下文更「昂貴」,但當請求到來時,無論如何都會創建請求上下文。
謝謝先生,這很有道理。但是,當請求到來並且應用程序上下文已經存在時,就會出現問題:從[源代碼](https://github.com/pallets/flask/blob/1949c4a9abc174bf29620f6dd8ceab9ed3ace2eb/flask/ctx.py#L230)當'app_ctx爲None或app_ctx.app!= self.app'時,現有應用程序上下文將被重用,但文檔指出應用程序上下文[不會在請求之間共享](http://flask.pocoo.org/ docs/0.12/appcontext /#上下文的位置)... –
該代碼確保正確的請求上下文與正確的應用程序上下文配對,僅此而已。當請求進入時,app context * always *已經存在。該代碼所做的是確保該請求的應用上下文位於堆棧頂部,以便爲該請求運行的所有代碼都有正確的'flask.g'對象。 –
僅適用於多個應用程序上下文處於活動狀態時。 –