狗书第二章笔记
?
線程是可單獨管理的最小指令集。進程經常使用多個活動線程,有時還會共享內存或文件句柄等資源。多線程 Web 服務器會創建一個線程池,再從線程池中選擇一個線程用于處理接收到的請求。
?
在 Flask 中有兩種上下文:程序上下文和請求上下文。下面的表 2-1 列出了這兩種上下文提供的變量。
| 變量名 | 上下文 | 說 明 ? |
| current_app | 程序上下文 | 當前激活程序的程序實例 |
| g | 程序上下文 | 處理請求時用作臨時存儲的對象。每次請求都會重設這個變量 |
| request | 請求上下文 | 請求對象,封裝了客戶端發出的 HTTP 請求中的內容 |
| session | 請求上下文 | 用戶會話,用于存儲請求之間需要“記住”的值的詞典 |
?
Flask 在分發請求之前激活(或推送)程序和請求上下文,請求處理完成后再將其刪除。程序上下文被推送后,就可以在線程中使用 current_app 和 g 變量。類似地,請求上下文被推送后,就可以使用 request 和 session 變量。如果使用這些變量時我們沒有激活程序上下文或請求上下文,就會導致錯誤。
?
?
2.5.3 請求鉤子
? before_first_request:注冊一個函數,在處理第一個請求之前運行。
? before_request:注冊一個函數,在每次請求之前運行。
? after_request:注冊一個函數,如果沒有未處理的異常拋出,在每次請求之后運行。
? teardown_request:注冊一個函數,即使有未處理的異常拋出,也在每次請求之后運行。
在請求鉤子函數和視圖函數之間共享數據一般使用上下文全局變量 g。例如,before_
request 處理程序可以從數據庫中加載已登錄用戶,并將其保存到 g.user 中。隨后調用視
圖函數時,視圖函數再使用 g.user 獲取用戶。
總結
- 上一篇: 获取png格式的MNIST数据集
- 下一篇: ubuntu+ngrok内网穿透+Fla