Flask 的配置文件引入方式又多种,并且它能应对多种不同场景下的不同配置。
Flask 引入配置的方式
Flask 引入配置的方式有很多种,我比较常用的是以对象或者文件的形式引入
1.字典形式引入
如果需要由业务逻辑修改配置可以用字典方式
app.config['DEBUG'] = True
2.文件形式引入
通过 from_pyfile()方法,可以从文件引入配置
# 引入配置
app.config.from_pyfile("文件名")
# config.py
DEBUG = True
3.对象形式引入
通过 from_object()方法,可以从对象引入配置
# 引入配置
app.config.from_object("python类")
# config.py
class Config(object):
DEBUG = False
4.环境变量形式引入
app.config.from_json("JSON文件名")
5.JSON 形式形式引入
app.config.from_envvar("环境变量名称")
6.字典函数形式引入
app.config.from_mapping({'DEBUG': True})
多种环境下配置
我们往往不仅仅只需要一套配置,开发时需要一套配置,测试需要一套,生产需要一套,下面我通过使用对象引入的方式演示多种环境下的配置编写。
# config.py
import os
class BaseConfig:
# 基础配置
DEBUG = False
HOST = "127.0.0.1"
PORT = "5000"
# 系统配置
SECRET_KEY = os.getenv("SECRET_KEY", "set a secret key")
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))
# 数据库配置
SQLALCHEMY_TRACK_MODIFICATIONS = False
class DevConfig(BaseConfig):
# 基础配置
DEBUG = True
SQLALCHEMY_ECHO = True
SQLALCHEMY_TRACK_MODIFICATIONS = True
HOST = "0.0.0.0"
# 数据库配置
SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(PROJECT_ROOT, 'data-dev.db')
class TestingConfig(DevConfig):
# 基础配置
TESTING = True
WTF_CSTF_ENABLED = False
# 数据库配置
SQLALCHEMY_DATABASE_URI = "sqlite:///:memory:"
class ProdConfig(BaseConfig):
# 基础配置
DEBUG = False
SQLALCHEMY_ECHO = False
HOST = "0.0.0.0"
PORT = "5000"
# 数据库配置
SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(PROJECT_ROOT, 'data.db')
config_choice = {
"default": BaseConfig,
"dev": DevConfig,
"test": TestingConfig,
"prod": ProdConfig
}
之后你可以根据不同的环境在 app 下调用配置
config_env = os.getenv('FLASK_CONFIG') or 'prod'
app.config.from_object(config_choice.get(config_env))
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于