Ошибка команды flask: такой команды нет ["create_db"]

Я хочу запустить несколько команд с терминала с помощью команды flask, но она не работает.

Ниже приводится структура моего проекта.

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

Поскольку flask runкоманда запускает приложение, я уверен, что моя переменная среды установлена ​​правильно. Однако, когда я пытаюсь использовать команду flask-cli-command, например:

flask create_db

Я получил, Error: No such command "create_db".

Следующее - мой FlaskUserAuthentication/commands.py файл-

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

и FlaskUserAuthentication/__init__.py модуль (где запускается экземпляр приложения Flask)-

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)

1 ответ

Решение

Проблема заключалась в том, что command.pyмодуль не был распознан приложением. Решение, которое я пробовал, - это создать план вcommands модуль, а затем в __init__.py модуль, в котором я инициировал appНапример, я зарегистрировал в нем соответствующий Blueprint. Итак, обновленный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 ****')

и обновленный __init__.py модуль

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

Теперь установите переменную среды и сервер разработки с помощью (в терминале) -

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

После этого используйте команду flask, например:

flask db create_db

PS: теперь из-за Blueprint, а не flask create_db, команда будет

flask db create_db

Мне нужно было понять суть проблемы, и за это я благодарю автора сообщения -

Где мне реализовать пользовательские команды фляги (cli)

и автору @emont01 за ответ на сообщение.

Другие вопросы по тегам