Creating custom commands in flask needs access to the app, which is generally created in app.py
like this:
import click
from flask import Flask
app = Flask(__name__)
@app.cli.command("create-user")
@click.argument("name")
def create_user(name):
...
However, in order not to bloat my app.py, I want to put my custom commands in a separate file e.g. commands.py
, but this doesn't work because the entrypoint to my project is app.py
, so I'll have to import app in commands.py
and import my commands in app.py
which results in a circular import error.
How can I create custom commands in separate files ?
Click the + (Add New Configuration) button and select Python. Give the configuration a name such as “flask run”. Click the Script path dropdown and change it to Module name, then input flask . The Parameters field is set to the CLI command to execute along with any arguments.
Testing CLI Commands Use its invoke() method to call commands in the same way they would be called from the command line. In the example above, invoking the command by name is useful because it verifies that the command was correctly registered with the app.
Installing Flask installs the flask script, a Click command line interface, in your virtualenv. Executed from the terminal, this script gives access to built-in, extension, and application-defined commands.
One way to achieve this would be using blueprints
I have tested it using Flask 1.1.1, so be sure to check the documentation of the correct version that you have.
Here is the general idea:
==> app.py <==
from flask import Flask
from commands import usersbp
app = Flask(__name__)
# you MUST register the blueprint
app.register_blueprint(usersbp)
==> commands.py <==
import click
from flask import Blueprint
usersbp = Blueprint('users', __name__)
@usersbp.cli.command('create')
@click.argument('name')
def create(name):
""" Creates a user """
print("Create user: {}".format(name))
Upon executing flask users
you should get a response like the following:
flask users
Usage: flask users [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
create Creates a user
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With