原始碼分析:
#第1步:
class flask(_packageboundobject):
self.config = self.make_config(instance_relative_config)
#第2步:
def make_config(self, instance_relative=false):
return self.config_class(root_path, self.default_config)
#self.config_class = config
#第3步:
class config(dict):
原始碼分析:
class config(dict):
def from_pyfile(self, filename, silent=false):
#找到檔案
filename = os.path.join(self.root_path, filename)
#建立了乙個模組,裡面沒有東西
d = types.moduletype('config')
d.__file__ = filename
try:
#開啟檔案,獲取所有內容
#再將配置檔案裡的所有值封裝到上一步建立的模組中
with open(filename, mode='rb') as config_file:
exec(compile(config_file.read(), filename, 'exec'), d.__dict__)
#執行from_object方法
self.from_object(d)
return true
def from_object(self, obj):
for key in dir(obj):
if key.isupper():
self[key] = getattr(obj, key)
方式三:
os.environ['flaks-settings'] = 'settings.py'
原始碼分析:
class config(dict):
def from_envvar(self, variable_name, silent=false):
#獲取settings檔案
rv = os.environ.get(variable_name)
#發現還是執行了from_pyfile方法
return self.from_pyfile(rv, silent=silent)
方式四:
原始碼分析:
class config(dict):
def from_object(self, obj):
#4.1如果settings.devconfig 是字串類/派生類的物件
if isinstance(obj, string_types):
#4.2
obj = import_string(obj)
for key in dir(obj):
if key.isupper():
self[key] = getattr(obj, key)
#4.2步:
def import_string(import_name, silent=false):
#把settings.devconfig按照.右切1次,得到模組名和類名
module_name, obj_name = import_name.rsplit('.', 1)
try:
module = __import__(module_name, none, none, [obj_name])
#獲取模組中的類並返回
try:
return getattr(module, obj_name)
flask原始碼分析 配置檔案 四
class flask packageboundobject config class config 配置由誰來載入配置 default config immutabledict flask定義了一些預設配置,如果自己不配則使用default def init self 這個物件可像操作字典一樣去操...
原始碼解析Flask的配置檔案
在flask裡,我們常在主檔案中定義某些配置,比如 實際上,flask中預設可以進行可選的配置項有很多。如果在開發的過程中,把所有需要的配置項都定義在主檔案中,就會造成整個程式的目錄結構不合理,如果需要重寫的flask配置項很多的時候,就可以把配置項用別的方式進行定義,然後匯入使用flask的配置檔...
MySQL原始碼分析(3) 配置檔案詳解
配置檔案詳解 關於配置檔案存放位置和優先順序 在一次部署中,我們發現mysql沒有按照配置檔案中的innodb data path選項建立檔案,查詢後發現這台機器上有多個配置檔案 etc my.cnf和 etc mysql my.cnf,而mysql會優先讀取 etc mysql my.cnf。當出...