05 Flask源码之:配置加载
1.加载配置文件
from flask import Flask
app = Flask(__name__,static_url_path='/xx')
app.config.from_object('xx.xx')
2.app.config源码分析
-
执行
config
里边的make_config
方法self.config = self.make_config(instance_relative_config)
make_config
def make_config(self, instance_relative=False): return self.config_class(root_path, defaults)
-
实例化
config_class
类config_class = Config class Config(dict): # Config继承了字典
3.from_object源码分析
-
执行
from_object
函数- 将所有键值对放到Config对象中
def from_object(self, obj): if isinstance(obj, string_types): obj = import_string(obj) for key in dir(obj): if key.isupper(): self[key] = getattr(obj, key)
-
执行
import_string(obj)
函数- 将配置文件的import_name通过最后一个点分割
- 通过反射的方式取对象名
def import_string(import_name, silent=False): import_name = str(import_name).replace(":", ".") module_name, obj_name = import_name.rsplit(".", 1) module = __import__(module_name, globals(), locals(), [obj_name]) return getattr(module, obj_name)
4. 总结
-
读取配置文件中的所有键值对,并将键值对全部放到Config对象
- Config是一个字典
-
把包含所有配置文件的Config对象,赋值给app.config