rt,今天看《flask Web开发》一书中,有示例代码:
创建一个文件Config.py保存配置:
...
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
,并且函数体为空:
@staticmethod
def init_app(app):
pass
之后在另一个文件中的程序工厂函数:
...
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特有的用来初始化配置的方法?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.