Ceci est une ancienne révision du document !
Le framework Flask s'appuie sur le paquetage Python Click pour la gestion de la ligne de commande.
On utilise les décorateurs pour déclarer une commande. Ci-dessous un exemple simple de commande sans argument :
from flask import Flask app = Flask(__name__) @app.cli.command("version") def version(): """Show application version.""" print("0.0.1")
La commande version retourne simplement le numéro de version du programme. On peut maintenant invoquer la commande depuis l'interpréteur :
flask version
Il est possible d'organiser les commandes dans des groupes.
On peut par exemple créer un groupe user pour contenir un ensemble de commandes s'appliquant sur les utilisateurs.
import click from flask import Flask from flask.cli import AppGroup app = Flask(__name__) user_commands = AppGroup('user') @user_commands.command('add') @click.argument('name') def create_user(name): """Add an user with name in argument.""" click.echo(f"Add an user with name : {name}.") @user_commands.command('remove') @click.argument('name') def delete_user(name): """Remove user with name in argument.""" click.echo(f"Remove an user with name : {name}.") app.cli.add_command(user_commands)
Si l'application utilise des Blueprints, on peut directement associer (register) les commandes à ceux-ci :
""" Blueprint regroupant les commandes CLI globales pour l'application """ from flask import Blueprint from app.config import DefaultConfig import click cmd_bp = Blueprint( 'cli', __name__, cli_group=None) @cmd_bp.cli.command('version') def version(): """Show application version/revision""" click.echo(f"{DefaultConfig.APP_NAME} {DefaultConfig.APP_VERSION}")
Ici, lors de l'instanciation du Blueprint, on utilise l'option cli_group avec la valeur None pour spécifier que nous ne souhaitons pas regrouper la ou les commandes du Blueprint.
Ensuite, dans l'application factory on enregistrera le Blueprint :
from flask import Flask from app.cli import cmd_bp # Charge les classes de configuration from app.config import DevelopmentConfig def create_app() -> Flask: app = Flask(__name__) app.config.from_object(DevelopmentConfig) ... app.register_blueprint(cmd_bp) return app
La documentation officielle du package Click détaille la syntaxe de définition des arguments et des options.