创建一个专门的配置文件,将所有的静态文件放到配置文件中去。比如setting.py文件
class Config(object):
DEBUG = False
TESTING = False
DATABASE_URI = 'sqlite://:memory:'
# 生产环境
class ProductionConfig(Config):
DEBUG = True
# 开发环境
class DevelopmentConfig(Config):
pass
# 测试环境
class TestingConfig(Config):
pass
app调用配置文件内容:
app.config.from_object("setting.DevelopmentConfig")
将开发环境所有配置内容都加载到app中。
配置的主要内容:
{
'DEBUG': get_debug_flag(default=False), 是否开启Debug模式
'TESTING': False, 是否开启测试模式
'PROPAGATE_EXCEPTIONS': None,
'PRESERVE_CONTEXT_ON_EXCEPTION': None,
'SECRET_KEY': None,
'PERMANENT_SESSION_LIFETIME': timedelta(days=31),
'USE_X_SENDFILE': False,
'LOGGER_NAME': None,
'LOGGER_HANDLER_POLICY': 'always',
'SERVER_NAME': None,
'APPLICATION_ROOT': None,
'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,
'MAX_CONTENT_LENGTH': None,
'SEND_FILE_MAX_AGE_DEFAULT': timedelta(hours=12),
'TRAP_BAD_REQUEST_ERRORS': False,
'TRAP_HTTP_EXCEPTIONS': False,
'EXPLAIN_TEMPLATE_LOADING': False,
'PREFERRED_URL_SCHEME': 'http',
'JSON_AS_ASCII': True,
'JSON_SORT_KEYS': True,
'JSONIFY_PRETTYPRINT_REGULAR': True,
'JSONIFY_MIMETYPE': 'application/json',
'TEMPLATES_AUTO_RELOAD': None,
}
config.from_object执行逻辑:
# 进入from_object(只看未注释部分)
def from_object(self, obj):
# 如果传入的obj是字符串类型
if isinstance(obj, string_types):
# 调用import_string方法(下一代码块)
# 返回配置对象
obj = import_string(obj)
# 获取配置对象内容并遍历输出
for key in dir(obj):
# 判断所有的静态字段是不是大写
if key.isupper():
# 如果是才将其写入app配置中
self[key] = getattr(obj, key)
# 进入import_string方法
def import_string(import_name, silent=False):
# 将传入的import_name也就是from_object中传入的字符串中的':'替换成'.'
import_name = str(import_name).replace(":", ".")
try:
try:
# 与import一样,导入import_name对应内容
__import__(import_name)
# 如果导入异常
except ImportError:
# 如果"."不在import_name中,抛出异常
if "." not in import_name:
raise
else:
# 将导入模块加载并返回
return sys.modules[import_name]
# 拆分模块名和类名
module_name, obj_name = import_name.rsplit(".", 1)
# 导入模块
module = __import__(module_name, globals(), locals(), [obj_name])
try:
# 返回module.obj_name
return getattr(module, obj_name)
# 抛出导入异常
except AttributeError as e:
raise ImportError(e)
except ImportError as e:
# 判断是否忽略导入异常,如果不,抛出异常
if not silent:
reraise(
ImportStringError, ImportStringError(import_name, e), sys.exc_info()[2]
)
除了上面这个常用的设置配置文件之外,还有以下几种方式:
# 直接修改配置
app.config['DEBUG'] = True
# 由于Config对象本质上是字典,所以还可以使用app.config.update(...)
# 字典格式
app.config.from_mapping({'DEBUG':True})
# 导入其他配置
app.config.from_pyfile("python文件名称")
# 例如:settings.py
DEBUG = True
# 主文件
app.config.from_pyfile("settings.py")
# 环境变量的值为python文件名称名称,内部调用from_pyfile方法
app.config.from_envvar("环境变量名称")
# JSON文件名称,必须是json格式,因为内部会执行json.loads
app.config.from_json("json文件名称")