flask 项目配置文件多环境规划(flask简单部署)

方法一:使用环境变量

最简单的方法是使用环境变量来区分不同的环境(如开发、测试、生产)。你可以在启动 Flask 应用时通过命令行参数设置环境变量,例如

export FLASK_ENV=development  # 在 Unix-like 系统
set FLASK_ENV=development     # 在 Windows 系统
flask run

在你的 Flask 应用中,可以这样读取环境变量:

import os
 
class Config:
    DEBUG = False
    TESTING = False
    DATABASE_URI = None
 
class DevelopmentConfig(Config):
    DEBUG = True
    DATABASE_URI = 'sqlite:///dev.db'
 
class ProductionConfig(Config):
    DEBUG = False
    DATABASE_URI = 'sqlite:///prod.db'
 
config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig  # 默认使用开发配置
}
 
def create_app(config_name=None):
    config_name = os.getenv('FLASK_ENV', 'default')
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    return app

方法二:使用配置文件

为每个环境创建一个配置文件(例如 config.py,config_dev.py,config_prod.py),然后在启动应用时指定使用哪个配置文件。

例如,config.py:

class Config:
    DEBUG = False
    TESTING = False
    DATABASE_URI = None

config_dev.py:

from config import Config
 
class DevelopmentConfig(Config):
    DEBUG = True
    DATABASE_URI = 'sqlite:///dev.db'

config_prod.py:

from config import Config
 
class ProductionConfig(Config):
    DEBUG = False
    DATABASE_URI = 'sqlite:///prod.db'

然后在你的应用中加载相应的配置文件:

import os
from flask import Flask
from config import DevelopmentConfig, ProductionConfig, Config  # 根据需要导入配置类
 
def create_app(config_name=None):
    if config_name is None:
        config_name = os.getenv('FLASK_ENV', 'default')  # 默认使用开发配置或通过环境变量指定配置
    config_class = {
        'development': DevelopmentConfig,
        'production': ProductionConfig,
        'default': DevelopmentConfig  # 默认使用开发配置
    }.get(config_name, Config)  # 如果环境变量未设置或设置错误,则使用默认配置类 Config
    app = Flask(__name__)
    app.config.from_object(config_class)  # 从指定配置类加载配置项到 app.config 中
    return app

Click 命令行工具

使用的是 Flask 的 Click 命令行工具,你可以在命令行中直接传递配置参数:

flask run --config development  # 开发环境配置参数传递示例,具体根据你定义的参数名来定。

然后在你的 create_app 函数中处理这些参数:

import click  # 需要先安装 click 包:pip install click
from flask import Flask, g  
'''
可能还需要导入 g 来存储全局变量,根据实际需要选择是否导入 g 或其他模块。
#这里仅为示例说明。具体实现可能需要根据实际情况调整。
#例如,可以通过 g 来存储当前的配置对象或其属性值,以便在应用的不同部分访问。
但通常更推荐直接使用 app.config 来存储和访问配置信息。
因此,下面的示例主要是为了说明如何处理命令行参数,实际应用时可能需要根据具体需求进行调整。

如果选择这种方式,通常不需要特别处理命令行参数来切换配置文件,
因为 Flask CLI 已经提供了便捷的方式来运行不同环境下的应用实例。
例如,可以通过编写不同的入口脚本来分别运行开发环境和生产环境的应用实例。
这样做的好处是保持了代码的清晰和简洁,同时也便于管理不同环境下的特定配置需求。
例如,可以为开发环境和生产环境分别编写一个启动脚本(如 dev_run.py 和 prod_run.py),
在每个脚本中创建对应环境的 Flask 应用
'''
原文链接:,转发请注明来源!