flask 配置檔案的原始碼分析

2021-09-12 10:25:32 字數 1943 閱讀 7495

原始碼分析:

#第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。當出...