仅当应用程序处于开发模式时才执行 Flask CLI 命令

Execute Flask CLI command only if app in development mode

我整合了Flask-Migrate into my project. When I'm using development mode (FLASK_ENV='development') I would normally call flask db migrate to apply changes to SQLite database. But, in testing mode (FLASK_ENV='testing') I'm using internal memory storage (sqlite:///:memory:) and it has no sense to call db migrate because it will end up throwing error。有没有什么方法可以在 Flask CLI 中创建 "pre_execute" 钩子来检查在执行命令之前使用了哪个 ENV?因此,例如,如果 FLASK_ENV 设置为 testing,则调用 flask db init 将导致中止执行命令。我试过类似的方法,但没有用:

@click.group(cls=FlaskGroup, create_app=create_app)
def cli():
    '''
    Main entry point.
    '''
    if app.config.ENV == ENV.TESTING:
        print('Running in TESTING mode...Aborting!')
        sys.exit(1)

问题:如何在某些 FLASK_ENV 设置下中止 cli 命令的执行?

编辑: 我正在从 .env 文件加载 FLASK_ENV 值。

好吧,也许一开始我试图用错误的方法解决问题,但我终于找到了处理问题中提到的错误的方法。因为我从文件加载 FLASK_ENV 的值,所以每次我想切换环境时都需要手动更改它。所以我所做的是修改我的测试 CLI 命令以在每次执行 pytest:

之前将 FLASK_ENV 的值设置为 testing
@click.command()
def test():
    '''
    Run tests.
    '''
    os.environ['FLASK_ENV'] = ENV.TESTING
    pytest.main(['--rootdir', './tests'])

现在即使 FLASK_ENV.env 文件中设置为 development 我仍然可以 运行 在 testing 模式下测试而不更改文件中的值。