20 Flask實戰第20天 Flask上下文

2022-05-04 13:15:10 字數 1948 閱讀 6899

我們知道通過request可以獲取表單中的資料。如果是多個使用者同時在用**,而全域性request就只有乙個,那麼flask是如何分辨哪使用者對應哪個請求呢?

這種情況下,就會用到local物件,只要繫結在local物件上的屬性,在每個執行緒中都是隔離的

我們看看,使用多執行緒修改值,不用local物件時,因為request是全域性共享的,只要修改了它的值,就會影響到其它執行緒!

當我們使用local物件繫結時,因為在每個執行緒中都是隔離的,所以不會影響到其它執行緒

總結:1、在flask中,類似於request的物件(還有session等),其實是繫結到了乙個werkzeug.local.local物件上。這樣,即使是同乙個物件,那麼多個執行緒中都是隔離的。

2、只要滿足繫結到這個物件上的屬性,在每個執行緒中都是隔離的,那麼它就叫做thread local物件

啟動訪問瀏覽器首頁

在檢視函式中,不用擔心上下文的問題,因為檢視函式要執行,肯定是通過url的方式執行的,這種情況下,flask底層就已經自動的幫我們把應用上下文推入到相應的棧中。如果要在檢視函式外面執行相關的操作,就必須手動推入上下文。

請求上下文也是存放在乙個localstack棧中,請求的相關的操作就必須用到請求的上下文,比如url_for反轉檢視函式

因為在檢視函式圖,會自動推入上下文,所以正常執行

當在檢視函式外面執行,沒有請求上下文的關係則會報錯

因此,手動推入請求上下文:推入請求上下文到棧中,會首先判斷有沒有應用上下文,如果沒有那麼就會先推入應用上下文到棧中,然後再推入請求上下文到棧中

2、如果在寫測試**,或者離線指令碼的時候,我們有時候可能需要建立多個請求上下文,這時候就需要存放到乙個棧中了。使用哪個請求上下文的時候,就把對應的請求上下文放到棧的頂部,用完了就要把這個請求上下文從棧中移除掉。

g物件是在整個flask應用執行期間都是可以使用的,並且它也是跟request一樣是執行緒隔離的。這個物件是專門用來儲存開發者自定義的一些資料,方便在整個flask程式中都可以使用。一般使用就是,將一些經常會用到的資料繫結到上面,以後就直接從g上面取就可以了,而不是通過傳參的形式,這樣更加方便。

比如當我們訪問首頁的時候會呼叫一些函式列印日誌,並且這個這個會列印出使用者名稱

新建乙個utils.py專門用來儲存這些工具函式,如下

這樣做雖然可以實現需求,但是每條呼叫都必須傳入username引數才可以,如果使用g就方便多了

把username存入到g.username中

函式那邊直接呼叫g.username就可以了

暑假第20天總結

今天上午就a了乙個不是樹狀陣列的題,用的set,輸出第一大,很是方便。下午的比賽配合的很好,但是有乙個尷尬的事,就是我讀了第一題,然後理解錯了,最後樣例都沒有過去,還是趙忠媛給我讀的題意,然後a了,我的閱讀水平真的是。難以用語言來形容了。劉文亞做的最後乙個是個貪心,我覺得他比較適合這種題,然後就交給...

詞根記憶第20天

助記 credit kred t n.信任 學分 cred it 助記 dictionary d k n r n.字典 助詞 turbulence t bj l ns n.騷亂 助詞 eminence em n ns n.傑出,著名 emin i ence 拔尖的人都是傑出,著名的 助詞 disli...

第26月第20天 springboot

1 pom.xml中新增支援web的模組 org.springframework.boot spring boot starter web pom.xml檔案中預設有兩個模組 spring boot starter 核心模組,包括自動配置支援 日誌和yaml spring boot starter ...