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