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!!!