自定义命令行命令#

可以通过应用程序自定义 quart 命令以添加其他功能。一个非常典型的用例是添加一个数据库初始化命令,

import click

@app.cli.command()
def initdb():
    click.echo('Database is migrating')
    ...

它将像这样工作:

$ quart initdb
Database is migrating

注意

与 Flask 不同,Quart 命令不在应用程序上下文中运行,因为 Click 命令是同步的,而不是异步的。

异步使用#

在自定义命令中使用异步代码的最佳方式是创建事件循环并手动运行它,例如:

import asyncio

@app.cli.command()
def fetch_db_data():
    result = asyncio.get_event_loop().run_until_complete(_fetch())


async def _fetch():
    return await db.execute(...)

在扩展或其他模块中包含 CLI 命令#

要在 Quart 扩展或蓝图中包含 CLI 命令,请在“run”工厂函数中注册方法

from quart import Quart
from my_extension import my_cli

def create_app():
    app = Quart(__name__)
    app = my_cli(app)
    return app

在你的模块或扩展中

import click

def my_cli(app):
    # @click.option("--my-option")
    @app.cli.command("mycli")
    def my_cli_command():
        print("quart ran this command")

    return app

这可以通过以下方式运行:

$ quart mycli
$ quart ran this command