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.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
