Flask扩展未在app.extensions中注册

时间:2017-04-21 14:22:37

标签: python flask flask-extensions

我想访问我在Flask应用上注册的一些扩展程序。我尝试使用app.extensions,但我初始化的一些扩展名不在dict中。

from flask import current_app
current_app.extensions.get(plugin_name)

extensions.py

from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from flask_mail import Mail
from flask_debugtoolbar import DebugToolbarExtension
from flask_images import Images
from flask_redis import FlaskRedis
from flask_plugins import PluginManager

db = SQLAlchemy()
migrate = Migrate()
mail = Mail()
toolbar = DebugToolbarExtension()
images = Images()
redis = FlaskRedis()
plugin_manager = PluginManager()

main.py

def configure_extensions(app):
    db.init_app(app)
    migrate.init_app(app, db)
    mail.init_app(app)
    toolbar.init_app(app)
    images.init_app(app)
    redis.init_app(app)
    plugin_manager.init_app(
        app,
        plugin_folder="app/plugins",
        plugin_import_path='app.plugins',
    )

当我查看current_app.extensions时,我只会看到一些扩展程序。 <{1}}和plugin_manager不在列表中。

toolbar

为什么>>> for key in app.extensions: print(key) migrate mail images sqlalchemy redis 中没有注册某些扩展程序?我是否错误地初始化它们?我怎样才能获得扩展?

1 个答案:

答案 0 :(得分:2)

要求将自己添加到app.extensions,也不需要扩展程序,它是作为可选方便提供的。显然,这些扩展不会自我添加。如果您需要,请考虑向相关项目提交补丁。

您不需要使用app.extensions来访问扩展程序实例。而是导入您创建的实例,例如from myapp.extensions import db。这是能够与初始化它们分开创建它们的关键。在应用程序上下文中使用时(例如在请求期间),对象将知道要使用的应用程序。

相关问题