Flask請求上下文源碼剖析流程

1、談談你對flask上下文管理機制的理解?

首先說一下ThreadingLocal,對每個線程保存它的數據,但是flask爲了支持協程,自己封裝了一個Local對象,其中創建了一個字典,{greenlet加唯一標示:存數據},這樣可以保證數據隔離。

請求到來時:

1、把request,session,等請求相關的數據封裝到了RequestContext中,

2、再將RequestContext對象添加到Local中(通過localstack將請求數據添加到Local對象中);

執行視圖時:

1、使用request時,只要調用request方法,都會執行LocalProxy中對應的方法,在這些方法中都會調用_lookup_req_object函數,該函數會通過LocalStack去Local中獲取值,在RequestContext中獲取request或者session

請求結束時:會調用ctx.auto_pop,Local中的數據被移除。

Flask處理流程

 

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