Flask CLI para crear comandos personalizados

- Andrés Cruz

In english
Flask CLI para crear comandos personalizados

Flask CLI permite crear comandos personalizados para poder realizar cualquier operación; estos comandos se ejecutan en el contexto de la aplicación; para instalar el paquete, tenemos:

$ pip install flask-cli

Registramos a nivel de la app:

my_app\__init__.py

from flask_cli import FlaskCLI
***
FlaskCLI(app)
Su uso es muy sencillo y el proceso es realizado en base a funciones:
my_app\comands\user.py
def register(app):
    @app.cli.command('mycmd')
    def mycmd():
        click.echo("Test")

Por lo tanto, un comando corresponde a una función que puede tener los siguientes decoradores:

  • @app.cli.command registra que nuestra función tiene un nuevo comando de línea de comandos; si no se pasa ningún argumento, Click asumirá el nombre de la función.
  • @click.argument agrega un argumento de línea de comando; en nuestro caso, para nombre de usuario y contraseña.

Con el funcionamiento aclarado, creamos una nueva función (comando) para crear un usuario:

my_app\comands\user.py

def register(app):
    @app.cli.command('create-user')
    @click.argument('username')
    @click.argument('password')
    def create_user(username, password):

        existing_username = User.query.filter_by(username=username).first()
        if existing_username:
            click.echo( 'This username has been already taken. Try another one.')
        
        user = User(username, password)
        db.session.add(user)
        db.session.commit()
        click.echo('User {0} Added.'.format(username))

    @app.cli.command('mycmd')
    def mycmd():
        click.echo("Test")

Registramos a nivel de la app:

my_app\__init__.py

from flask_cli import FlaskCLI
***
# extensions
from my_app.comands.user import register
register(app)

Es importante que registres la aplicación mediante la variable de entorno FLASK_APP o que puedas usar comandos como:

$ flask run

Para ejecutar el proyecto, de tal forma que de esta manera se tiene acceso al contexto de la aplicación y con esto la posibilidad de ejecutar los comandos personalizados.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz en Udemy

Acepto recibir anuncios de interes sobre este Blog.