init_app静态方法是flask特有给config类的吗?

发布于 2022-09-01 16:06:21 字数 1467 浏览 21 评论 0

rt,今天看《flask Web开发》一书中,有示例代码:

创建一个文件Config.py保存配置:

python
... class Config: SECRET_KEY = os.environ.get('SECRET_KEY') or 'hard to guess string' SQLALCHEMY_COMMIT_ON_TEARDOWN = True #...各种其他配置变量在此省略 @staticmethod def init_app(app): pass class DevelopmentConfig(Config): #该环境下特有配置,省略 class TestingConfig(Config): #该环境下特有配置,省略 class ProductionConfig(Config): #该环境下特有配置,省略 config = { 'development': DevelopmentConfig, 'testing': TestingConfig, 'production': ProductionConfig, 'default': DevelopmentConfig }

总体意思是创建基类Config来保存通用配置 其他的各环境使用不同的配置 再用一个字典提供选择

但是Config类最后定义一个静态方法init_app,并且函数体为空:

python@staticmethod
def init_app(app):
    pass

之后在另一个文件中的程序工厂函数:

python...

bootstrap = Bootstrap()
mail = Mail()
moment = Moment()
db = SQLAlchemy()

def create_app(config_name):
    app = Flask(__name__)

    #将指定的配置通过from_object()方法导入app.config字典配置对象

    app.config.from_object(config[config_name])

    config[config_name].init_app(app)

    bootstrap.init_app(app)
    mail.init_app(app)
    moment.init_app(app)
    db.init_app(app)

    return app

其中使用init_app的部分我就看不懂了,具体达到的效果是将之前在config.py中定义的配置给到这四个实例,但是init_app函数的函数体不是空的么?为什么可以达到效果?还是说init_app是flask特有的用来初始化配置的方法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

像极了他 2022-09-08 16:06:21

这个

config[config_name].init_app(app)

中的 init_app 和下面的 init_app 是不同的:

bootstrap.init_app(app)
mail.init_app(app)
moment.init_app(app)
db.init_app(app)

flask扩展会带有一个 init_app 方法. 具体可以看下扩展相关的内容.

嘿看小鸭子会跑 2022-09-08 16:06:21

原来是这样!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文