所有配置项
{
'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_SAMESITE': None,
'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,
}
配置文件的使用
注意: app.config 的本质就是一个字典,所以字典中有的方法都可以在 app.config 上使用
1. 查看所有的配置项
# app.py
from flask import Flask
app = Flask(__name__)
config = app.config # 查看所有的配置项
print(config) # <Config {'MAX_COOKIE_SIZE': 4093, 'JSONIFY_MIMETYPE': 'application/json', ……}>
if __name__ == '__main__':
app.run()
2. 修改配置项
- 方式一 -> 常用
# app.py
from flask import Flask
app = Flask(__name__)
app.config['DEBUG'] = True
app.config['TESTING'] = True
if __name__ == '__main__':
app.run()
- 方式二
# app.py
from flask import Flask
app = Flask(__name__)
config_dic = {
'DEBUG': True,
'TESTING': True,
}
app.config.update(config_dic) # 因为 app.config 的本质是字典,所以可以使用字典中的 update 方法
if __name__ == '__main__':
app.run()
- 方式三
- 语法: app.config.from_json('json文件名称')
- 文件必须是json格式,因为内部会执行json.loads
# flask_config.json
{
"DEBUG": true,
"TESTING": true
}
# app.py
from flask import Flask
app = Flask(__name__)
app.config.from_json('flask_config.json')
if __name__ == '__main__':
app.run()
- 方式四
- 语法: app.config.from_mapping(字典)
- 字典格式
# app.py
from flask import Flask
app = Flask(__name__)
app.config.from_mapping({
'DEBUG': True,
'TESTING': True
})
if __name__ == '__main__':
app.run()
- 方式五 -> 常用
- 语法: app.config.from_pyfile('python文件名称')
# settings.py
DEBUG = True
TESTING = True
# app.py
from flask import Flask
app = Flask(__name__)
app.config.from_pyfile('settings.py')
if __name__ == '__main__':
app.run()
- 方式六 -> 常用 + 推荐使用
- 语法: app.config.from_object('python类或类的路径')
- 好处: 可以根据开发环境的不同切换不同的配置类
# settings.py
class Config(object): # 公共配置项
DEBUG = True
TESTING = True
DATABASE_URI = 'sqlite://:memory:'
class ProductionConfig(Config): # 线上环境所使用的配置项,以继承了公共配置项
DATABASE_URI = 'mysql://user@localhost/foo'
class DevelopmentConfig(Config): # 开发环境所使用的配置项,以继承了公共配置项
TESTING = False
# app.py
from flask import Flask
app = Flask(__name__)
app.config.from_object('settings.DevelopmentConfig')
if __name__ == '__main__':
app.run()
- 方式六的原理代码
# settings.py
class Foo(object):
DEBUG = True
TESTING = True
# xxx.py
import importlib
path = 'settings.Foo'
settings_str, foo_str = path.rsplit('.', maxsplit=1) # 分割路径
settings_model = importlib.import_module(settings_str) # 通过字符串路径获取对应的模块
Foo = getattr(settings_model, foo_str) # 获取 settings 模块下的 Foo 类
for key in dir(Foo): # dir() 获取类或对象的所有静态属性和方法
if key.isupper():
print(key, getattr(Foo, key)) # DEBUG True
← 路由