FLask 灵活管理多种场景下的配置

本贴最后更新于 1927 天前,其中的信息可能已经时移世改

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))
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 674 回帖
  • Flask
    19 引用 • 9 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...