1. 程式人生 > >深度剖析Flask上下文管理機制

深度剖析Flask上下文管理機制

完成 不理解 ocs 簡單 server cat cati 計算機 處理流程

前言

上下文這個概念多見於文章中,是一句話中的語境,也就是語言環境。一句莫名其妙的話出現會讓人不理解什麽意思,如果有語言環境的說明,則會更好,這就是語境對語意的影響。
上下文是一種屬性的有序序列,為駐留在環境內的對象定義環境。在對象的激活過程中創建上下文,對象被配置為要求某些自動服務,如同步、事務、實時激活、安全性等等。 如在計算機中,相對於進程而言,上下文就是進程執行時的環境。具體來說就是各個變量和數據,包括所有的寄存器變量、進程打開的文件、內存信息等。可以理解上下文是環境的一個快照,是一個用來保存狀態的對象。在程序中我們所寫的函數大都不是單獨完整的,在使用一個函數完成自身功能的時候,很可能需要同其他的部分進行交互,需要其他外部環境變量的支持,上下文就是給外部環境的變量賦值,使函數能正確運行。

請求上下文

關於WSGI

WSGI(全稱Web Server Gateway Interface),是為 Python 語言定義的Web服務器Web應用程序之間的一種簡單而通用的接口,它封裝了接受HTTP請求解析HTTP請求發送HTTP響應等等的這些底層的代碼和操作,使開發者可以高效的編寫Web應用。 Flask提供了兩種上下文,一種是應用上下文(Application Context),一種是請求上下文(Request Context)。
  • RequestContext 請求上下文
  • Request 請求的對象,封裝了Http請求(environ)的內容
  • Session
    根據請求中的cookie,重新載入該訪問者相關的會話信息。
  • AppContext 程序上下文
  • g 處理請求時用作臨時存儲的對象。每次請求都會重設這個變量
  • current_app 當前激活程序的程序實例
參見Flask上下文官方文檔 請求上下文 和 應用上下文.   1. application 指的就是當你調用app = Flask(__name__)創建的這個對象app;   2.request 指的是每次http請求發生時,WSGI server(比如gunicorn)調Flask.call()之後,在Flask對象內部創建的Request對象;   3.application 表示用於響應WSGI請求的應用本身,request 表示每次http請求;   4.application的生命周期大於request,一個application存活期間,可能發生多次http請求,所以,也就會有多個request

生命周期

  • current_app的生命周期最長,只要當前程序實例還在運行,都不會失效。
  • Requestg的生命周期為一次請求期間,當請求處理完成後,生命周期也就完結了
  • Session就是傳統意義上的session了。只要它還未失效(用戶未關閉瀏覽器、沒有超過設定的失效時間),那麽不同的請求會共用同樣的session。

Flask處理流程

技術分享圖片

待續.......

深度剖析Flask上下文管理機制