def create_app(config_name=None):
if config_name is None:
config_name = os.getenv('FLASK_CONFIG', 'development')
app = Flask("bluelog")
app.config.from_object(config[config_name])
register_logging(app) # 注册日志处理器
register_extensions(app) # 注册扩展(扩展初始化)
register_blueprints(app) # 注册蓝本
register_commands(app) # 注册自定义shell命令
register_errors(app) # 注册错误处理函数
register_shell_context(app) # 注册shell上下文处理函数
register_template_context(app) # 注册模板上下文处理函数
return app
def register_extensions(app):
bootstrap.init_app(app)
db.init_app(app)
moment.init_app(app)
mail.init_app(app)
ckeditor.init_app(app)
当我在终端执行自定义指令flask forge
(向数据库生成虚拟数据)时,有一个报错;
AssertionError: The sqlalchemy extension was not registered to the current application. Please make sure to call init_app() first;
后面我把register_extensions(app)
里面的 db.init_app(app) 移动到create_app(config_name=None)
中,执行flask forge,这次成功执行了;
但是我看到教程里面的是第一种,在我看来,第一种不是把app传入到了register_extensions中执行了db.init_app吗,那应该是可以的呀,为什么会报错呢?