1. 程式人生 > >Flask 配置檔案config之from_object 篇

Flask 配置檔案config之from_object 篇

Flask Web開發看到第7章,硬著頭皮感覺看不下去

回過頭去補基礎

這裡講到 app.config.from_object() 這個載入配置的方式

首先,app是通過app=Flask(__name__)來實現的

那麼,app的config方法肯定是通過Flask類裡面獲得的

先看到app的config屬性的定義


然後,我們再看到make_config(instance_relative_config)這個函式的定義內容


他最終返回的是config_class這樣一個方法,而config_class是一個類物件,而這個類物件是從Config類而來

而裡面的引數root_path和default_config的解釋如下

如下圖

另外我們來看一下

應用的root_path的定義,自動指向應用根目錄

另外看一下instance_relative_config 的解釋:預設為False,如果設定為True的話,他會將配置檔案路徑設定為例項檔案的路徑,而不是應用程式根目錄

另外需要注意的是,這個root_path和下面Config類的root_path的性質,應該說是一樣的


而Config類則是一個整合自dict字典基類的子類,構造方法如下

而由於make_config最終返回的是config_class也就是Config的類物件

所以,他把root_path和default_config傳了進去,而default_config如下面第二圖

預設引數defaults是None,或者是一個自己傳入的字典




接著,Config例項方法的from_object如下:


至於上面紅線的2個部分,請見下面解釋

第一個import_string是當物件是string的時候,引入路徑

而第二個string_types,則是表示如果PYTHON版本是3,則是(str,),如果PYTHON版本是2,則是(str,unicode),反正符合要求就可以了

其實第一個import_string的功能我還不是很理解

先說第二個吧,obj的型別,就2種,要麼是str,要麼是一個類,具體可以見官方文件說明

所以,當傳入用config字典提取的值(提取出來是類)之後,他就會應用類屬性裡面的配置了(所有的配置都是需要大寫輸入的,所以程式裡都是大寫)



所以,我們平時用的app.config.from_object(config[你自己定義的config字典key名字])才能執行!!!

另外,記住,config([你自己定義的config字典]),他為什麼可以找到,是因為,在程式頭上,我們已經定義了from config import config!!!