在flask應用中,全部的flask應用都必須建立一個應用實例。web服務器把它接收的來自客戶端的請求經過WSGI的協議傳遞給這個對象以進行處理。這時候,它會提供一種叫上下文的神奇環境,它能讓一些對象能夠全局可見,這樣你的視圖函數就能夠去訪問這些對象作些處理,而又在同時有那麼多請求時確保線程安全。python
flask裏有兩種上下文,應用上下文和請求上下文,這兩種上下文裏暴露出了4種變量:web
應用上下文 |
current_app | 活動應用程序的應用實例 |
應用上下文安全 |
g | 在處理請求時臨時存儲數據,每次請求都會被重設 |
請求上下文服務器 |
request | request對象,封裝了客戶端發出的http請求的內容 |
請求上下文session |
session | 用來存儲值的字典,這些值在請求中是被記住的 |
flask在調度每一個請求前都會push這兩種上下文,而請求被處理後又被移除。應用上下文被push時它對應的兩個變量就能夠被線程訪問了,請求上下文也是同樣的道理。固然,假如這些上下文沒有被激活的話,訪問這些變量就會引起錯誤了。app
舉個例子:ide
>>>from flask import Flask, current_app >>>app = Flask(__name__) >>>current_app Traceback (most recent call last): ... RuntimeError: working outside of application context >>>app_ctx = app.app_context() >>>app_ctx.push() >>>current_app.name '__main__' >>>app_ctx.pop()