什么是上下文
上下文 : 相當於一個容器,保存了Flask程序運行過程中的一些信息.在計算機中,相對於進程而言,上下文就是進程執行時的環境.
Flask中有兩種上下文:請求上下文和應用上下文
請求上下文(request contest)
request,和session都是請求上下文對象
request 封裝了HTTP請求的內容,針對的是http請求,request對象只有在上下文的生命周期內才有效,離開了請求的生命周期,其上下文環境就不存在了
也就無法獲取request對象了.
session 用來記錄請求回話中的信息,針對的用戶信息
應用上下文 (application context)
current_app : 表示當前運行程序文件的程序事例,可以通過current_app.name打印當前應用程序實例的名字
g : 處理請求時,用於臨時儲存的對象,每次請求都會重置
1 當調用app = Flask(name)的時候,創建了程序應用對象
2 request在每次http請求發生時,WSGI server調用Flask.call();然后在flask內部創建flask對象
3 app的生命周期大於request和g,一個app存活期間,可能發生多次 http請求,所以會有多個request,g
4 最終傳入視圖函數,通過return,redirect,和render_template生成response對象,返回給客戶端
從一個Flask App讀入配置並且啟動開始,就進入了App Context,在其中我們可以配置文件,打開資源文 件,通過路由規則反向URL
請求上下文和應用上下文的區別
請求上下文:保存了客戶端和服務器交互的數據
應用上下文 : 在flask程序運行的過程中,保存了一些配置信息,比如程序文件名,數據庫的鏈接,用戶信息等
問題
既然在web應用運行時,應用上下文和請求上下文都是thread local 為什么還要獨立二者?
是為了能讓兩個以上的應用共存在WSGI應用中,這樣在請求中,可以通過應用上下文來獲取當前請求的應用信息
參考鏈接https://blog.csdn.net/Enjolras_fuu/article/details/79892961