init_app静态方法是flask特有给config类的吗?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个
中的
init_app
和下面的init_app
是不同的:flask扩展会带有一个
init_app
方法. 具体可以看下扩展相关的内容.原来是这样!