flask 使用程序工廠函數 和 藍本中實現程序功能

使用程序工廠函數app

在單個文件中開發程序很方便,但卻有個很大的缺點,由於程序在全局做用域中建立,所
以沒法動態修改配置。函數

運行腳本時,程序實例已經建立,再修改配置爲時已晚。這一點對
單元測試尤爲重要,由於有時爲了提升測試覆蓋度,必須在不一樣的配置環境中運行程序。單元測試


這個問題的解決方法是延遲建立程序實例,把建立過程移到可顯式調用的工廠函數中。這
種方法不只能夠給腳本留出配置程序的時間,還可以建立多個程序實例,這些實例有時在
測試中很是有用。程序的工廠函數在 app 包的構造文件中定義,如示例 7-3 所示。
構造文件導入了大多數正在使用的 Flask 擴展。因爲還沒有初始化所需的程序實例,因此沒
有初始化擴展,建立擴展類時沒有向構造函數傳入參數。 create_app() 函數就是程序的工
廠函數,接受一個參數,是程序使用的配置名。配置類在 config.py 文件中定義,其中保存
的配置可使用 Flask  app.config 配置對象提供的 from_object() 方法直接導入程序。至
於配置對象,則能夠經過名字從 config 字典中選擇。程序建立並配置好後,就能初始化
擴展了。在以前建立的擴展對象上調用 init_app() 能夠完成初始化過程。測試

 

在藍本中實現程序功能spa


轉換成程序工廠函數的操做讓定義路由變複雜了。在單腳本程序中,程序實例存在於全
局做用域中,路由能夠直接使用 app.route 修飾器定義。對象

但如今程序在運行時建立,只有調用 create_app() 以後才能使用 app.route 修飾器,這時定義路由就太晚了。和路由
同樣,自定義的錯誤頁面處理程序也面臨相同的困難,由於錯誤頁面處理程序使用 app.
errorhandler 修飾器定義。
幸虧 Flask 使用藍本提供了更好的解決方法。藍本和程序相似,也能夠定義路由。不一樣的
是,在藍本中定義的路由處於休眠狀態,直到藍本註冊到程序上後,路由才真正成爲程序
的一部分。使用位於全局做用域中的藍本時,定義路由的方法幾乎和單腳本程序同樣。
和程序同樣,藍本能夠在單個文件中定義,也可以使用更結構化的方式在包中的多個模塊中
建立。爲了得到最大的靈活性,程序包中建立了一個子包,用於保存藍本。示例 7-4 是這
個子包的構造文件,藍本就建立於此。作用域

相關文章
相關標籤/搜索