Flask的奧秘五

2021-10-07 12:30:12 字數 1942 閱讀 2583

當請求到來時:

flask將request和session封裝成requestcontext,讓後放入flask的local中

當時圖執行時

匯入request,呼叫_lookup_req_object函式去local中獲取requestcontext,再到requestcontext中獲取request,session

當請求結束時

會呼叫requestcontext物件的auto_pop()方法將requestcontext從local中移除。

原始碼流程如下:

比較模糊,可到檢視原圖。

獲取執行緒和協程的唯一標識

# 獲取執行緒的唯一標識

from _thread import get_ident

print

(get_ident())

# 協程的唯一標識

from greenlet import getcurrent as get_ident

print

(get_ident(

))

偏函式和itertools.chain的使用

偏函式:

偏函式就是預先傳遞乙個函式1的若干個引數,反回乙個新的函式2,函式2只需要傳遞函式1剩餘的引數,作用就是預先傳遞引數。

itertools.chain:

將兩個序列連線在一起,返回乙個chain物件,可以轉換成列表

from functools import partial

deffun1

(a, b)

:print

(a + b)

fun2 = partial(fun1,1)

print

(fun2(2)

)# 結果輸出3

from itertools import chain

a =[1,

2,3]

b =[4,

5,6]

print

(list

(chain(a, b)))

# [1, 2, 3, 4, 5, 6]

__setattr__方法和__getattr__方法的使用

這樣可以讓取值賦值非常方便,但是在__init__方法在的寫法要注意,寫成self.local_dict = 就會造成無限遞迴。

from _thread import get_ident

class

local

(object):

def__init__

(self)

:object

.__setattr__(self,

"local_dict",)

object

.__setattr__(self,

"get_ident"

, get_ident)

def__setattr__

(self, key, value)

: self.local_dict[self.get_ident()]

=def

__getattr__

(self, item)

:try

:return self.local_dict[self.get_ident()]

[item]

except

:return

none

l = local(

)l.xx =

1# 這句就會呼叫 __setattr__ 方法將xx=1存入local_dict字典中

l.xx # 這句就會呼叫__getattr__方法,從local_dict中取出xx的值

重新撿起flask(五)

又想蹭點東西了.這裡主要是想來複習一下jinja2模板的一些內容。之前其實很快的過了jinja2裡面寫一些if或for控制語句的東西。真到現在想直接寫一些,卻有些忘了,如果你也忘了,我們一起來回憶一些吧。ouch 上面是默寫的,也不知道是不是對的。我仿著思路再寫一下for的吧。不記得有沒有while...

編碼的奧秘

文字檔案解析 文字檔案對應於人類可以閱讀的文字,如何從2進製轉換為文字檔案呢?起初由於計算機在美國發明,自然大家考慮的是英語如何表示,英語字母總共26個,加 上特殊字元,128個字元,7位既乙個byte即可表示出來。這個就是大家所熟知的ascill編碼。對應關係很簡單,乙個字元對應一乙個byte。但...

諮詢的奧秘

美 傑拉爾德 溫伯格先生的諮詢的奧秘是一本針對諮詢顧問的工具書。書中諸多生動但淺顯的法則 定理能夠為初入諮詢行業的顧問們提供與客戶交流和服務,並且避免衝突的有效建議,並配合小情節,讓這些法則更有意義。其中的折中法則,和信任法則都留給大家挺深的印象。其中他提到諮詢很重要的一點是,諮詢的賣點是諮詢師這個...