flask-应用配置

本文探讨了Flask应用的三种配置方式:1)从文件加载,优点是方便管理,缺点是复用性差;2)从对象加载,通过面向对象实现个性化配置,但可能泄露重要信息;3)从环境变量加载,结合默认配置与自定义配置,确保隐私安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.从文件中加载

main.py文件

from datetime import timedelta

from flask import Flask

app = Flask(__name__)
# 设置config类,父类继承dict
# app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=7)

# 从文件中加载配置,缺点是代码冗余
app.config.from_pyfile('config.py')


@app.route('/')
def index():
    return 'index'


if __name__ == '__main__':
    app.run(debug=True)

config.py文件

from datetime import timedelta

# 定义和配置的同名的全局变量
PERMANENT_SESSION_LIFETIME = timedelta(days=7)

优点

配置单独封装起来, 方便统一管理

缺点

如果有多套配置, 则复⽤性较差

2.从对象中加载

优点

面向对象的形式, 可以定义子类来继承公共配置和实现子类个性化的配置
main.py文件

from flask import Flask

app = Flask(__name__)


# 从对象中加载配置
from config import DevelopmentConfig
app.config.from_object(DevelopmentConfig)


@app.route('/')
def index():
    print(app.config.get('PERMANENT_SESSION_LIFETIME'))
    print(app.config.get('SQL_URL'))
    return 'index'


if __name__ == '__main__':
    app.run(debug=True)

config.py文件

from datetime import timedelta


class BaseConfig:  # 相同的配置放入基类中,不同的配置子类重写
    PERMANENT_SESSION_LIFETIME = timedelta(days=7)


class DevelopmentConfig(BaseConfig):
    '''开发环境的变量'''
    SQL_URL = 'mysql://127.0.0.1/infodb'


class ProductingConfig(BaseConfig):
    '''生产环境的变量'''
    SQL_URL = 'mysql://192.168.243.133/infodb'


class TestingConfig(BaseConfig):
    '''测试环境的变量'''
    SQL_URL = 'mysql://43.168.243.166/infodb'

封装工厂函数&动态创建应用

启动命令:
export FLASK_APP="main:create_app('dev')"
flask run -h 127.0.0.1 -p 5000

main.py文件

from flask import Flask, current_app
from config import config_dict


def index():
    print(current_app.config.get('PERMANENT_SESSION_LIFETIME'))
    print(current_app.config.get('SQL_URL'))
    return 'index'


# 定义工厂函数:将对象的创建过程封装起来,根据需求创建对象
def create_app(config_type):
    # 创建flask应用和加载配置
    app = Flask(__name__)
    # 根据配置类型取出配置子类
    config_class = config_dict[config_type]
    app.config.from_object(config_class)
    # 添加路由
    app.add_url_rule('/', endpoint=index.__name__, view_func=index)
    return app

config.py文件

from datetime import timedelta


class BaseConfig:  # 相同的配置放入基类中,不同的配置子类重写
    PERMANENT_SESSION_LIFETIME = timedelta(days=7)


class DevelopmentConfig(BaseConfig):
    '''开发环境的变量'''
    SQL_URL = 'mysql://127.0.0.1/infodb'


class ProductingConfig(BaseConfig):
    '''生产环境的变量'''
    SQL_URL = 'mysql://192.168.243.133/infodb'


class TestingConfig(BaseConfig):
    '''测试环境的变量'''
    SQL_URL = 'mysql://43.168.243.166/infodb'


config_dict = {
    'dev': DevelopmentConfig,
    'pro': ProductingConfig,
    'test': TestingConfig
}

缺点

不⽅便设置⾃定义的配置(代码被git管理, ⼀旦修改为⾃定义配置, 团队其他成员还需要改回来)
重要配置容易泄露(代码被团队共享, 且需要传到git服务器上)

3.从环境变量中加载

# 从环境中加载变量, 设置silent=True, 及时未找到文件也不会报错
app.config.from_envvar('ENV_CONFIG', silent=True)

先从对象中加载默认配置, 再 通过环境变量重载⾃定义配置和隐私配置
silent=True, 找不到该环境变量也不报错

启动命令:
export ENV_CONFIG=文件绝对路径/config.py
flask run -h 127.0.0.1 -p 5000
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值