我在Web应用程序的开发过程中使用工厂模式和flask扩展,例如flask-admin。我想在应用程序尚未创建时在 Flask-admin 中加载一些配置。因此,我使用 current_app.config["SOME_CONFIG"]
来获取配置值。但是我得到了 在应用程序上下文之外工作。
异常。代码如下:
# __init__.py
from flask import Flask
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config_name)
app.config.from_pyfile("config.py")
from admin import admin
admin.init_app(app)
return app
# admin/__init__.py
from flask import current_app
from flask_admin import Admin
admin = Admin(name=current_app.config["ADMIN_NAME"], template="bootstrap2")
最佳答案
在 create_app 函数期间,您的应用程序仍处于设置状态(请参阅 http://flask.pocoo.org/docs/0.11/appcontext/ )。在设置状态期间,您需要引用应用程序对象才能访问它,不能使用 current_app。
您可以使用以下方法在 create_app 函数中实例化 Admin 对象:
admin = Admin(name=app.config["ADMIN_NAME"], template="bootstrap2")
或者
更改 admin 变量并在 admin/__init__.py
中创建一个函数:
admin = object()
def instantiate_admin(config):
global admin
admin = Admin(name=config["ADMIN_NAME"], template="bootstrap2")
return admin
并在 create_app() 中使用它:
from admin import instantiate_admin
admin = instantiate_admin(app.config)
admin.init_app(app)
关于python - 在flask中使用工厂模式时如何在flask扩展中使用配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38999702/