python - 在flask中使用工厂模式时如何在flask扩展中使用配置?

标签 python flask

我在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/

相关文章:

Python : Most efficient way to count elements of long list 1 in long list 2 ?(列表理解真的很慢)

python语法错误以及yt包的用法

python - Django clean_data.get ('obj' )方法返回无

python - flask 中的 sqlalchemy.orm.exc.UnmappedInstanceError

python - 操作系统错误: [Errno 13] Permission denied when initializing Celery in Docker

python - html2text : How to parse urls containing special characters?

QMimeData 中的 Python 对象

python - 在没有docker的情况下运行正常时拒绝使用docker连接本地ip地址

flask 登录不能在蓝图对象中使用?

python - 使用 Flask、Flask-SQLAlchemy 和 SQLAlchemy 进行单元测试时,如何在线程之间隔离测试数据库?