API de línea de comandos de Flask
Flask construye herramientas de línea de comandos basadas en Click.
Medianteflaskel comando ejecuta la aplicación y gestiona tareas.
Todas las clases CLI están enflask.cliel módulo.
FlaskGroup
El grupo de comandos principal de Flask. Medianteflaskel comando se usa.
| Parámetros | Descripción |
|---|---|
| add_default_commands=True | Si se añaden comandos predeterminados como run, shell, routes, etc. |
| create_app=None | Función de fábrica de la aplicación, devuelve una instancia de Flask |
| add_version_option=True | Si se añade la opción --version |
| load_dotenv=True | Si se cargan los archivos .env y .flaskenv |
| set_debug_flag=True | Si se establece el indicador debug según las variables de entorno |
AppGroup
Clase base del grupo de comandos CLI para aplicaciones y blueprints. Medianteapp.cliobp.clise añaden comandos personalizados.
| Métodos | Descripción |
|---|---|
| command(*args, **kwargs) | Registra comandos CLI. De forma predeterminada envuelve automáticamente con with_appcontext |
| group(*args, **kwargs) | Registra subcomandos de grupo. Usa AppGroup como clase de grupo por defecto |
AppGroup.command() está habilitado por defectowith_appcontext=True, lo que significa que tu función de comando tendrá automáticamente el contexto de la aplicación. Si no lo necesitas, pasawith_appcontext=False。
ScriptInfo
Almacena información en tiempo de ejecución del script para cargar la aplicación. Normalmente no se necesita operar manualmente.
| Atributos | Descripción |
|---|---|
| app_import_path | Ruta de importación de la aplicación (valor de la opción --app) |
| create_app | Función de fábrica de la aplicación |
| data | Diccionario de datos adicionales arbitrarios |
| load_app() | Carga y devuelve la instancia de la aplicación Flask |
Funciones de utilidad
| Funciones | Descripción |
|---|---|
| with_appcontext(f) | Decorador. Asegura que la función decorada se ejecute en el contexto de la aplicación. |
| pass_script_info(f) | Decorador. Pasa la instancia de ScriptInfo como primer parámetro a la función. |
| load_dotenv(path) | Carga las variables de entorno del archivo .env |
Comandos predeterminados
| Comando | Descripción | Parámetros comunes |
|---|---|---|
| flask run | Inicia el servidor de desarrollo | --host, --port, --debug, --reload/--no-reload |
| flask shell | Inicia un shell interactivo de Python | Carga automáticamente variables de contexto como app, g, etc. |
| flask routes | Enumera todas las rutas registradas | --sort (endpoint/methods/domain/rule/match), --all-methods |
Opciones estándar
| Opción | Descripción |
|---|---|
| -A / --app IMPORT | Especifica el módulo y la instancia de la aplicación, como "app:create_app()" |
| --debug / --no-debug | Habilita/deshabilita el modo de depuración |
| -e / --env-file FILE | Especifica la ruta del archivo .env |
| --version | Muestra las versiones de Flask y de las dependencias |
Ejemplos de código
Ejemplos
from flask import Flask
app = Flask(__name__)
# Registrar comando personalizado
@app.cli.command("init-db")
def init_db_command():
"""Inicializa la base de datos"""
print("Database initialized.")
# Registrar comando con parámetros
@app.cli.command("greet")
@app.cli.option("--name", "-n", default="EJEMPLO", help="Objeto del saludo")
def greet_command(name):
"""Envía un saludo"""
print(f"Hello, {name}!")
# Registrar grupo de subcomandos
user_cli = app.cli.group("user")
@user_cli.command("list")
def list_users():
"""Enumera todos los usuarios"""
print("Listing users...")
@user_cli.command("create")
@user_cli.option("--username", required=True)
def create_user(username):
"""Crea un nuevo usuario"""
print(f"Creating user: {username}")
# Uso:
# flask init-db
# flask greet --name World
# flask user list
# flask user create --username ejemplo
app = Flask(__name__)
# Registrar comando personalizado
@app.cli.command("init-db")
def init_db_command():
"""Inicializa la base de datos"""
print("Database initialized.")
# Registrar comando con parámetros
@app.cli.command("greet")
@app.cli.option("--name", "-n", default="EJEMPLO", help="Objeto del saludo")
def greet_command(name):
"""Envía un saludo"""
print(f"Hello, {name}!")
# Registrar grupo de subcomandos
user_cli = app.cli.group("user")
@user_cli.command("list")
def list_users():
"""Enumera todos los usuarios"""
print("Listing users...")
@user_cli.command("create")
@user_cli.option("--username", required=True)
def create_user(username):
"""Crea un nuevo usuario"""
print(f"Creating user: {username}")
# Uso:
# flask init-db
# flask greet --name World
# flask user list
# flask user create --username ejemplo