續:Flask Web的工廠函數與藍本

續:Flask Web的工廠函數與藍本

上篇提到的程序的工廠函數在app包的構造文件中定義,即__init__.py。這個構造文件導入大多數正在使用的Flask擴展。不過由於尚未初始化所需的程序實例,所以沒有初始化擴展,創建擴展類時也沒有向構造函數傳入參數。create_app()函數就是程序的工廠函數,他接受一個程序使用的配置名作為參數,該配置名在config.py文件中定義。程序創建,配置後,就能初始化擴展了。在之前創建的擴展對象上調用init_app()可以完成初始化過程。

續:Flask Web的工廠函數與藍本

轉換成程序工廠函數的操作讓定義路由變得複雜了。本來我們單腳本文件可以直接使用app.route修飾器的。現在由於程序是在運行時創建的,只有調用create_app()之後才能使用app.route修飾器,然而這時才定義路由就太晚了。為了解決使用工廠函數新帶來的問題,Flask提供了藍本的解決方案。藍本和程序類似,也可以定義路由,不同的是,在藍本中定義的路由處於休眠狀態,直到藍本註冊到程序上,路由才會成為程序的一部分。這樣一來,使用位於全局作用域的藍本時,定義路由的方法幾乎和單腳本程序一樣。為了使藍本有更大的靈活性,建議使用更結構化的方式在包中的多個模塊中創建藍本,為此,在程序包中創建一個子包,專門保存藍本。藍本的創建是通過實例化一個Buleprint類對象,創建時必須傳入兩個參數:藍本的名字和藍本所在的包或者模塊,這樣,模塊就能和藍本產生關聯。另外藍本在工廠函數中註冊到程序上。

續:Flask Web的工廠函數與藍本

至此,flask web 的基礎知識基本結束。


分享到:


相關文章: