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