flask web开发中config文件中init_app函数的作用

在Flask Web开发中,`init_app`函数在config文件中的主要作用是将配置实例化并连接到Flask应用。这个函数通常在创建较大规模的应用时用于初始化和分离配置,使得应用更具模块化和可维护性。

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

    在flask web 开发这本书中,进行大型网页设置的时候,在config文件中定义了一个这样的函数:

@staticmethod
    def init_app(app):
        pass

    当时没有多想,反正就是一个空函数,可是到后面,十七章的时候又出现了这样的情况:

class ProductionConfig(Config):
    SQLALCHEMY_DATABASE_URI = os.environ.get('DATABASE_URL') or \
        'sqlite:///' + os.path.join(basedir, 'data.sqlite')

    @classmethod
    def init_app(cls, app):
        Config.init_app(app)
    # ...

    这时我开始想这个函数的作用,所以我来到用它的地方:

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    # ...

    在config[config_name]中加入config_name = testing的话,那么就会得到TestingConfig这个类,当然一开始的init_app函数是空函数,所以并没有任何用处,但是到Production这里就有用了。所以说init_app这个函数对于之前的Config类来说就是一个占位符号,为了避免写if而占位的函数,当然如果你不想写这个函数也是没问题的,只要想下面这样就行了。

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    # 这样写,config中的空函数init_app,就可以去掉了,
    # 此时ProductionConfig中的@classmethod也可以改成@staticmethod,当然不改也没关系
    if config_name = 'production':
       config[config_name].init_app(app)
    当然在这本书中只有production才要用到它,这样写也不是很麻烦,如果有10个函数,5个要用,5个不用的呢?所以按照作者的写法是最优化的写法,但是我们常常不知道为什么要这样写。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值