6 votes

commande flask Erreur : Aucune commande de ce type ["create_db"]

Je veux exécuter des commandes à partir du terminal avec la commande 'flask' mais cela ne fonctionne pas.

Voici la structure de mon projet.

FlaskUserAuthentication
 FlaskUserAuthentication
    API
       __init__.py
       db_models.py
       routes.py
    Site
       __init__.py
       routes.py
       static
          form_style.css
       templates
           Site
               base_layout.html
               index.html
               logout.html
               profile.html
               signin.html
               signup.html
    __init__.py
    commands.py
 run.py
 venv

Comme le flask run exécute l'application, je suis sûr que ma variable d'environnement est correctement définie. Cependant, lorsque j'essaie d'utiliser la commande flask-cli comme-

flask create_db

J'ai compris, Error: No such command "create_db".

Ce qui suit est mon FlaskUserAuthentication/commands.py fichier-

from FlaskUserAuthentication import app, db
from FlaskUserAuthentication.API.db_models import Group, Member, Project, Milestone

@app.cli.command('create_db')
def createDatabase():
    db.create_all()
    print('***** Datebase created ****')

#....some more commands

et le FlaskUserAuthentication/__init__.py (où l'instance de l'application Flask est initiée)-

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SECRET_KEY'] = 'justasamplekey'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)

from FlaskUserAuthentication.API.routes import api
from FlaskUserAuthentication.Site.routes import site

app.register_blueprint(api)
app.register_blueprint(site)

4voto

user3871797 Points 21

Le problème était que le command.py n'a pas été reconnu par l'application. La solution que j'ai essayée est de lancer un blueprint dans le module commands et ensuite dans le module __init__.py où j'ai lancé le module app j'ai enregistré le Blueprint correspondant avec cette instance. Ainsi, la mise à jour commands.py -

from FlaskUserAuthentication import db
from flask import Blueprint
from FlaskUserAuthentication.API.db_models import Group, Member, Project, Milestone

@cmd = Blueprint('db', __name__) #created a Blueprint for this module

@cmd.cli.command('create_db') #rather than generating the cli command with app,
def createDatabase():         # used the blueprint, cmd
    db.create_all()
    print('***** Datebase created ****')

et la mise à jour __init__.py module,

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SECRET_KEY'] = 'justasamplekey'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)

from FlaskUserAuthentication.API.routes import api
from FlaskUserAuthentication.Site.routes import site
from FlaskUserAuthentication.commands import cmd

app.register_blueprint(api)
app.register_blueprint(site)
app.register_blueprint(cmd) # registered the command module as blueprint

Maintenant, configurez la variable d'environnement et le serveur de développement avec (dans le terminal) -

export FLASK_APP=FlaskUserAuthentication/__init__.py
export FLASK_DEBUG=1

Après cela, utilisez la commande flask comme-

flask db create_db

P.S. : maintenant à cause du Plan d'action plutôt que de flask create_db la commande sera

flask db create_db

J'avais besoin de me rendre compte de la racine du problème et je remercie l'auteur du billet.

Où dois-je implémenter les commandes personnalisées de Flask (cli) ?

et l'auteur, @emont01 pour sa réponse au post.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X