myesn

myEsn2E9

hi
github

Flask: 根据当前环境加载不同配置文件

说明#

比如数据库连接信息在测试、正式环境通常对应两套不同的配置。

本文基于 Python 的 Flask 框架实现。

如果想使用 .env 文件来配置不同环境,参考:Python: 通过 .env 文件配置不同环境中的环境变量

创建配置文件#

首先需要创建一个基类,这里面包含了项目中所有用到的配置:

# config/base.py

class Base:
    SERVICE_NAME: str = 'service a'
    DB_HOST: str = 'base://'

然后再创建测试、正式环境的配置文件,它们都继承自 Base 配置类:

# config/dev.py

class Dev(Base):
    DB_HOST: str = 'dev://'
# config/prod.py

class Prod(Base):
    DB_HOST: str = 'prod://'

创建 init.py#

上面已经创建了两套环境的配置,接着我们再在当前目录的 __init__.py 文件中创建一个工具函数,它可以根据当前环境加载不同的配置文件。同时直接声明一个实例(单例),这样其它地方就可以直接通过这个实例来读取配置:

# config/__init__.py

import os

from config.dev import Dev
from config.prod import Prod

def _get_config():
    '''根据当前环境创建一个Config实例'''
    env = os.getenv('FLASK_ENV', 'development')
    if env == 'development':
        return Dev()
    else:
        return Prod()

current_config = _get_config()

导入配置到 Flask 框架#

最后在实例化 Flask 后,导入上面 __init__.py 中声明的 current_config 即可:

from config import current_config

app = Flask(__name__)
app.config.from_object(current_config)

读取配置#

我们可以使用以下方式来获取配置的键值:

from config import current_config

app = Flask(__name__)
app.config.from_object(current_config)

# 方法一:从 Falsk 中获取
app.config.get('DB_HOST')

# 方法二:从 config/__init__.py 的实例中获取
current_config.DB_HOST

参考#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。