flask學習筆記-07

flask07-應用上下文和請求上下文


在Flask中有兩種上下文:應用(程序)上下文和請求上下文。

變量名

上下文

說明

current_app

應用上下文

當前激活程序的程序實例

g

應用上下文

處理請求時用作臨時存儲的對象。每次請求都會重設這個變量

request

請求上下文

請求對象,封裝了客戶端發出的HTTP請求中的內容

session

請求上下文

用戶會話,用於存儲請求之間需要“記住”的☞的字典

什麼是“上下文”

上下文, 英文context,其完整意思應當是concatenate-text,聯繫文本,在IT行業中譯爲上下文其實並不確切也不容易理解,尤其是對於初學者,把它翻譯爲“引用池”或者“引用區”更加恰當。

在java的JSP中的內置對象中的PageContext,事實上,它就是本頁面的一個單獨的儲存區域,裏面存放的是各個地方(各個範圍)傳過來的屬性的鍵值對的總彙。比如說,從Application裏面存儲了apptime,appname等等屬性,在Session中又存了sessionid sessionstate等等屬性,在request範圍中又存了username,password等屬性的鍵值對,那麼PageContext就會把所有能得到的屬性全部集中到一個區域裏,你可以通過這個小容器,接收和調用到各個範圍傳遞過來的屬性,這就是所謂的”上下文“, 你可以把它記爲”引用池“!

Flask中的上下文

爲了避免大量可有可無的參數把視圖函數弄得一團糟,Flask使用上下文臨時把某些對象變爲全局訪問。有了上下文,就可以寫出下面的視圖函數:

from flask import request

 

@app.route('/')def index();

user_agent = request.headers.get('User-Agent')

return '<p>Your Browser is %s</p>' %user_agent

這裏的request屬於請求上下文,請求對象,封裝了客戶端發出的HTTP請求中的內容,距離說明:假設前端使用ajax帶參數 data:{a:b} 請求一個後端接口,我們用Python寫的後端接口就可以使用request這個“全局變量”來獲取ajax的請求數據,如果接口是post,put類型,則可以使用

data = request.form

獲取,如果是get請求,則是可以使用

data=request.args

獲取,這裏不再詳細說明,轉接一個博客可以瞭解flask獲取request參數 

http://blog.csdn.net/u013055678/article/details/70214756,這裏的“全局變量”我們加引號是因爲我們只是把他當做全局變量來使用,但實際上並不是真正的全局變量。比如,在多線程服務器中,多個線程同時處理不同客戶端發送的不同請求時,每個線程看到的request對象是不可能相同的。Flask使用上下文讓特定的變量在一個線程中全局可以訪問,與此同時卻不會干擾其他線程。

Flask在分發請求之前激活應用和請求上下午文,請求處理完成後再將其刪除。程序上下文被推送後,就可以在線程中使用current_app和g變量。類似的,請求上下文被推送後,就可以使用request和session變量。如果使用這些變量是我們沒有激活程序上下文或請求上下文,就會導致錯誤。 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章