Flask 扩展未在 app.extensions 中注册
Flask extension not registered in app.extensions
我想访问在我的 Flask 应用程序上注册的一些扩展。我尝试使用 app.extensions
,但我初始化的一些扩展不在字典中。
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
时,我只看到了一些扩展。 plugin_manager
和 toolbar
不在列表中。
>>> for key in app.extensions: print(key)
migrate
mail
images
sqlalchemy
redis
为什么某些扩展没有在 app.extensions
中注册?我是否错误地初始化了它们?如何获得扩展?
扩展不需要将自己添加到 app.extensions
,它是作为一种可选的便利而提供的。显然,这些扩展不会自行添加。如果需要,请考虑向相关项目提交补丁。
您不需要使用 app.extensions
来访问扩展实例。相反,导入您创建的实例,例如 from myapp.extensions import db
。这就是能够与初始化它们分开创建它们的意义所在。当在应用程序上下文中使用时(例如在请求期间),对象将知道要使用哪个应用程序。
我想访问在我的 Flask 应用程序上注册的一些扩展。我尝试使用 app.extensions
,但我初始化的一些扩展不在字典中。
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
时,我只看到了一些扩展。 plugin_manager
和 toolbar
不在列表中。
>>> for key in app.extensions: print(key)
migrate
mail
images
sqlalchemy
redis
为什么某些扩展没有在 app.extensions
中注册?我是否错误地初始化了它们?如何获得扩展?
扩展不需要将自己添加到 app.extensions
,它是作为一种可选的便利而提供的。显然,这些扩展不会自行添加。如果需要,请考虑向相关项目提交补丁。
您不需要使用 app.extensions
来访问扩展实例。相反,导入您创建的实例,例如 from myapp.extensions import db
。这就是能够与初始化它们分开创建它们的意义所在。当在应用程序上下文中使用时(例如在请求期间),对象将知道要使用哪个应用程序。