Flask 配置文件config之from_object 篇

原文链接

Flask Web开发看到第7章,硬着头皮感觉看不下去

回过头去补基础

这里讲到 app.config.from_object() 这个加载配置的方式


首先,app是通过app=Flask(__name__)来实现的

那么,app的config方法肯定是通过Flask类里面获得的


先看到app的config属性的定义

Flask 配置文件config之from_object 篇


然后,我们再看到make_config(instance_relative_config)这个函数的定义内容

Flask 配置文件config之from_object 篇


他最终返回的是config_class这样一个方法,而config_class是一个类对象,而这个类对象是从Config类而来

而里面的参数root_path和default_config的解释如下

如下图

Flask 配置文件config之from_object 篇


另外我们来看一下

应用的root_path的定义,自动指向应用根目录

另外看一下instance_relative_config 的解释:默认为False,如果设置为True的话,他会将配置文件路径设置为实例文件的路径,而不是应用程序根目录

另外需要注意的是,这个root_path和下面Config类的root_path的性质,应该说是一样的

Flask 配置文件config之from_object 篇

Flask 配置文件config之from_object 篇



而Config类则是一个集成自dict字典基类的子类,构造方法如下

而由于make_config最终返回的是config_class也就是Config的类对象

所以,他把root_path和default_config传了进去,而default_config如下面第二图

默认参数defaults是None,或者是一个自己传入的字典

Flask 配置文件config之from_object 篇

Flask 配置文件config之from_object 篇

Flask 配置文件config之from_object 篇


接着,Config实例方法的from_object如下:


Flask 配置文件config之from_object 篇


至于上面红线的2个部分,请见下面解释

第一个import_string是当对象是string的时候,引入路径

而第二个string_types,则是表示如果PYTHON版本是3,则是(str,),如果PYTHON版本是2,则是(str,unicode),反正符合要求就可以了


其实第一个import_string的功能我还不是很理解

先说第二个吧,obj的类型,就2种,要么是str,要么是一个类,具体可以见官方文档说明

所以,当传入用config字典提取的值(提取出来是类)之后,他就会应用类属性里面的配置了(所有的配置都是需要大写输入的,所以程序里都是大写)

Flask 配置文件config之from_object 篇



Flask 配置文件config之from_object 篇

所以,我们平时用的app.config.from_object(config[你自己定义的config字典key名字])才能运行!!!

另外,记住,config([你自己定义的config字典]),他为什么可以找到,是因为,在程序头上,我们已经定义了from config import config!!!

Flask 配置文件config之from_object 篇