Flask 命令行 API
Flask 命令行 API Flask 基于 Click 构建了命令行工具。通过 flask 命令运行应用和管理任务。 所有 CLI 类都在 flask.cli 模块中。 FlaskGroup Flask 的主命令组。通
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.cli 或 bp.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
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