现在位置: 首页 > Flask 教程 > 正文

Flask 命令行 API

Flask 基于 Click 构建了命令行工具。

通过 flask 命令运行应用和管理任务。

所有 CLI 类都在 flask.cli 模块中。


FlaskGroup

Flask 的主命令组。通过 flask 命令使用。

参数 说明
add_default_commands=True 是否添加 run、shell、routes 等默认命令
create_app=None 应用工厂函数,返回 Flask 实例
add_version_option=True 是否添加 --version 选项
load_dotenv=True 是否加载 .env 和 .flaskenv 文件
set_debug_flag=True 是否根据环境变量设置 debug 标志

AppGroup

应用和蓝图的 CLI 命令组基类。通过 app.clibp.cli 添加自定义命令。

方法 说明
command(*args, **kwargs) 注册 CLI 命令。默认自动包装 with_appcontext
group(*args, **kwargs) 注册子命令组。默认使用 AppGroup 作为组类

AppGroup.command() 默认启用 with_appcontext=True,意味着你的命令函数会自动拥有应用上下文。如果不需要,传 with_appcontext=False


ScriptInfo

存储脚本运行时的信息,用于加载应用。通常不需要手动操作。

属性 说明
app_import_path 应用导入路径(--app 选项值)
create_app 应用工厂函数
data 任意附加数据字典
load_app() 加载并返回 Flask 应用实例

工具函数

函数 说明
with_appcontext(f) 装饰器。确保被装饰的函数在应用上下文中执行
pass_script_info(f) 装饰器。将 ScriptInfo 实例作为第一个参数传递给函数
load_dotenv(path) 加载 .env 文件中的环境变量

默认命令

命令 说明 常用参数
flask run 启动开发服务器 --host, --port, --debug, --reload/--no-reload
flask shell 启动交互式 Python Shell 自动加载 app、g 等上下文变量
flask routes 列出所有注册的路由 --sort (endpoint/methods/domain/rule/match), --all-methods

标准选项

选项 说明
-A / --app IMPORT 指定应用模块和实例,如 "app:create_app()"
--debug / --no-debug 启用/禁用调试模式
-e / --env-file FILE 指定 .env 文件路径
--version 显示 Flask 和依赖版本

代码示例

实例

from flask import Flask

app = Flask(__name__)

# 注册自定义命令
@app.cli.command("init-db")
def init_db_command():
    """初始化数据库"""
    print("Database initialized.")

# 注册带参数的命令
@app.cli.command("greet")
@app.cli.option("--name", "-n", default="RUNOOB", help="问候对象")
def greet_command(name):
    """发送问候"""
    print(f"Hello, {name}!")

# 注册子命令组
user_cli = app.cli.group("user")

@user_cli.command("list")
def list_users():
    """列出所有用户"""
    print("Listing users...")

@user_cli.command("create")
@user_cli.option("--username", required=True)
def create_user(username):
    """创建新用户"""
    print(f"Creating user: {username}")

# 使用方式:
# flask init-db
# flask greet --name World
# flask user list
# flask user create --username runoob