Ошибка команды 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 за ответ на сообщение.