在谈Flask修改配置文件之前,先需要理解,通过一个字符串(模块名.类名)如settings.Foo
,可以根据此字符串去获取去其中的大写的静态字段(类变量)
import importlib
path = "settings.Foo"
p,c = path.rsplit('.',maxsplit=1) #分割.左右的字符
m = importlib.import_module(p) #传递参数p,找到settings模块
cls = getattr(m,c) #利用gettattr方法,在模块中找到对应的类
for key in dir(cls): #dir方法会打印参数cls对应类的静态字段
if key.isupper(): #判断该静态字段是否全大写字母
print(key,getattr(cls,key)) #打印出全大写字母的字段名和对应的值
- 配置文件
Flask中,应用配置文件的语法为
app.config.from_object("settings.DevelopmentConfig")
即在settings.py定义DevelopmentConfig类,编写配置选项,settings.py如下
from datetime import timedelta
class Config(object):
DEBUG = False
TESTING = False
SECRET_KEY = "asdfasdfas23"
DATABASE_URI = 'sqlite://:memory:'
SESSION_COOKIE_NAME = 'session'
SESSION_COOKIE_DOMAIN = None
SESSION_COOKIE_PATH = None
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_SECURE = False
SESSION_REFRESH_EACH_REQUEST = True
PERMANENT_SESSION_LIFETIME = timedelta(hours=1)
class ProductionConfig(Config):
DATABASE_URI = 'mysql://user@localhost/foo'
class DevelopmentConfig(Config):
DEBUG = True
class TestingConfig(Config):
TESTING = True
若要应用不同的配置文件,做不同的修改即可,上述代码做继承的好处是,不同环境相同的配置代码不用重写,比如修改成测试文件下的配置文件
#app.config.from_object("settings.DevelopmentConfig")
app.config.from_object("settings.TestingConfig")