1. 程式人生 > >Flask中的一些問題的初步彙總三

Flask中的一些問題的初步彙總三

Flask有兩大核心:Werkzeug和Jinja2

  • Werkzeug實現路由、除錯和Web伺服器閘道器介面
  • Jinja2實現了模板。
    Werkzeug是一個遵循WSGI協議的python函式庫
  • 其內部實現了很多Web框架底層的東西,比如request和response物件;
  • 與WSGI規範的相容;支援Unicode;
  • 支援基本的會話管理和簽名Cookie;
  • 整合URL請求路由等。

Werkzeug庫的 routing 模組負責實現 URL 解析。不同的 URL 對應不同的檢視函式,routing模組會對請求資訊的URL進行解析,匹配到URL對應的檢視函式,執行該函式以此生成一個響應資訊。
routing模組內部有


Rule類
用來構造不同的URL模式的物件,路由URL規則
Map類
儲存所有的URL規則和一些配置引數
BaseConverter的子類
負責定義匹配規則
MapAdapter類
負責協調Rule做具體的匹配的工作

簡而言之 Werkzeug實現了路由功能 Jinja2實現了模板功能

上下文:相當於一個容器,儲存了 Flask 程式執行過程中的一些資訊。
Flask中有兩種上下文,請求上下文和應用上下文
請求上下文(request context)

在 flask 中,可以直接在檢視函式中使用 request 這個物件進行獲取相關資料,而 request 就是請求上下文的物件,儲存了當前本次請求的相關資料,請求上下文物件有:request、session


request
封裝了HTTP請求的內容,針對的是http請求。
舉例:user = request.args.get(‘user’),獲取的是get請求的引數。
session
用來記錄請求會話中的資訊,針對的是使用者資訊。
舉例:session[‘name’] = user.id,可以記錄使用者資訊。
還可以通過session.get(‘name’)獲取使用者資訊。

應用上下文(application context)
它的字面意思是 應用上下文,但它不是一直存在的,它只是request context 中的一個對 app 的代理(人),所謂local proxy。它的作用主要是幫助 request 獲取當前的應用,它是伴 request 而生,隨 request 而滅的。
應用上下文物件有:current_app,g


current_app
應用程式上下文,用於儲存應用程式中的變數,可以通過current_app.name列印當前app的名稱,也可以在current_app中儲存一些變數,
例如:
應用的啟動指令碼是哪個檔案,啟動時指定了哪些引數
載入了哪些配置檔案,匯入了哪些配置
連了哪個資料庫
有哪些public的工具類、常量
應用跑再哪個機器上,IP多少,記憶體多大
current_app.name
current_app.test_value=‘value’
g變數
g 作為 flask 程式全域性的一個臨時變數,充當者中間媒介的作用,我們可以通過它傳遞一些資料,g 儲存的是當前請求的全域性變數,不同的請求會有不同的全域性變數,通過不同的thread id區別
g.name=‘abc’
注意:不同的請求,會有不同的全域性變數
兩者區別:
請求上下文:儲存了客戶端和伺服器互動的資料
應用上下文:flask 應用程式執行過程中,儲存的一些配置資訊,比如程式名、資料庫連線、應用資訊等

其中部分資訊來源於網上資料和書籍,如有雷同,純屬資訊時代的快速發展,大同小異。