首页 > 解决方案 > app_context 的烧瓶变量

问题描述

每次使用自己编写的 CLI 命令时,都会调用 app_context,从而连接额外的蓝图,以及在项目启动时调用的记录器。是否有任何列表或变量可以从调用app_context发生的地方写入。 __name__到处都是一样的,总是返回'app'。

project.py

from app import create_app, cli
app = create_app()
cli.register(app)

app/__init__.py

db = SQLAlchemy()
migrate = Migrate()


def create_app(config_class=Config):
    app = Flask(__name__)
    app.config.from_object(config_class)

    db.init_app(app)
    migrate.init_app(app, db)

    app.logger.setLevel(logging.INFO)
    app.logger.info('Project startup')

    return app

app.logger.info('Project startup')每次我调用 CLI 命令时都会调用。使用CLI命令时不调用该函数可以添加什么条件?

标签: pythonpython-3.xflask

解决方案


log level如果要禁用app.logger日志,则无需设置。让我们检查:

app = Flask('')
# app logs are disabled. uncomment to see app logs.
# app.logger.setLevel(logging.INFO)
app.logger.info('Project startup')

因此,您可以log level使用附加参数进行配置:

def create_app(config_class=Config, log_level=None):
    app = Flask(__name__)
    app.config.from_object(config_class)
    if log_level:
        app.logger.setLevel(logging.INFO)

一个更好的方法是使用 2 个不同的配置(第一个 - for web app,第二个 - for CLI app)。在这种情况下,您可以自定义任何设置(包括 log level)。


推荐阅读