05 flask源码剖析之配置加载

05 Flask源码之:配置加载

1.加载配置文件

from flask import Flask

app = Flask(__name__,static_url_path='/xx')

app.config.from_object('xx.xx')

2.app.config源码分析

  1. 执行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)
    
  2. 实例化config_class

    config_class = Config
    class Config(dict):
    # Config继承了字典
    

3.from_object源码分析

  1. 执行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)
    
  2. 执行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

posted @ 2019-11-25 20:21  LBZHK  阅读(113)  评论(0编辑  收藏  举报