Flask 應用對象app具有config的屬性,這些屬性對於在視圖或者在命令調試中訪問很方便。但是現在項目的模塊導入app 實例會容易出現循環導入的問題
Flask 通過應用情景解決了這個問題,不是直接引用一個app,而是使用current_app 代理,該代理指向處理當前活動的應用;
應用情景是指,在上下文中訪問某些變量才有意義,在上下文外面訪問無效;如在路由外訪問current_app,會報runtimeError 錯

在路由中使用是正常的

flask 還有應用上下文,對Flask核心對象的封裝,提供了一些好用的方法,這樣上下文除了核心對象還可以包含其它的數據和操作;
請求上下文是對Request請求對象的封裝;
AppContext RequestContext,通過結構很方便查找到;
分別都實現了push和pop等方法;
app 和 Request() 對象只是其中的一個屬性;
應用上下文,獲取應用數據需要具備的環境;
請求上下文,獲取請求數據需要具備的環境;
在測試的時候,未在路由中使用app對象會報錯,但通過上下文獲取就可以。即AppContext 和 RequstContext 這兩個對象是通過current_app 和 request 獲取的;
例子,管理其它的數據和操作

上下文管理器用於解決外部環境依賴
如:在視圖函數里面獲取請求參數,有三種方法
1、直接傳遞參數

2、通過全局變量
缺點:多個線程同時請求程序訪問這些變量時勢必會互相影響,但不設置為全局變量,那在編寫代碼時每次都要顯式滴傳遞這些變量也容易出錯
3、通過上下文來管理外部參數

