【问题标题】:flask command Error: No such command ["create_db"]烧瓶命令错误:没有这样的命令[“create_db”]
【发布时间】:2020-03-20 18:05:36
【问题描述】:

我想使用“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 like-

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)

【问题讨论】:

  • 我不知道为什么我的问题被否决了,但这不是一个重复的问题,因为我在堆栈上尝试了其他解决方案并解决了这个问题。无论如何,我需要帮助,所以无论是否投反对票,任何人都可以指导我正确的方向,因为我对自己做错了什么感到困惑。
  • 试试下面的flask --help 它会显示在flask cli 下注册的所有命令。此外,您的CLIGroup 应该在我假设您正在运行服务器的run.py 中执行。
  • flask --help 对我没有多大帮助,因为它只是告诉我如何执行一个命令和三个可用的命令,但我需要知道我的问题的根源。跨度>

标签: python flask environment-variables command-line-arguments flask-cli


【解决方案1】:

问题是应用程序无法识别command.py 模块。我尝试的解决方案是在commands 模块中启动一个蓝图,然后在我启动app 实例的__init__.py 模块中,我用它注册了相应的蓝图。所以,更新后的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

P.S.:现在因为蓝图而不是flask create_db,命令将是

flask db create_db

我需要了解问题的根源,为此我感谢帖子的作者-

Where should I implement flask custom commands (cli)

以及作者@emont01 对帖子的回复。

【讨论】:

  • 感谢您提到的“我应该在哪里实现烧瓶自定义命令 (cli)”的帖子,这很有帮助!
猜你喜欢
  • 2020-07-16
  • 2020-12-13
  • 1970-01-01
  • 2020-12-09
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 2020-09-10
相关资源
最近更新 更多