Flask CLI 命令不在 __init__.py 文件中

Flask CLI command not in __init__.py file

我正在尝试将 commands 添加到我的 Flask 应用程序。

这是我的 __init__.py 文件:

import os

from flask import Flask
from flask_cors import CORS
from flask_mongoengine import MongoEngine

app = Flask(__name__)
CORS(app)
app.config.from_object(os.environ['APP_SETTINGS'])

db = MongoEngine(app)

import slots_tracker_server.views  # noqa

如果我加进去:

@app.cli.command()
def test_run():
    print('here')

我可以 运行 flask test_run 没有问题,但是如果我尝试将代码移动到另一个文件,例如:commands.py,我会得到错误 Error: No such command "test_run". 尝试 运行 命令时。

我错过了什么?

使用 click(Flask 命令背后的库)注册您的命令:

# commands.py
import click

@click.command()
def test_run():
    print('here')

在您的 __init__.py 中导入并注册命令:

# __init__.py
from yourapp import commands

from flask import Flask
app = Flask(__name__)

app.cli.add_command(commands.test_run)

看看official docs

在你commands.py你可以像这样添加注册功能:

def register(app):

    @app.cli.command(name='test_run', help="test_run command")
    def register_test_run():
        test_run()

    # other commands to register

然后在你的__init__.py中导入这个寄存器函数

from flask import Flask
app = Flask(__name__)

from commands import register
register(app)

注意,您应该在初始化 app 后导入 register