标签: flask-cli

我应该在哪里实现烧瓶自定义命令(cli)

在flask中创建自定义命令需要访问app,一般是app.py这样创建的:

import click
from flask import Flask

app = Flask(__name__)

@app.cli.command("create-user")
@click.argument("name")
def create_user(name):
    ...
Run Code Online (Sandbox Code Playgroud)

但是,为了不让我的 app.py 膨胀,我想将我的自定义命令放在一个单独的文件中,例如commands.py,但这不起作用,因为我的项目的入口点是app.py,所以我必须导入应用程序commands.py并导入我的命令app.py会导致循环导入错误。

如何在单独的文件中创建自定义命令?

python command-line-interface flask python-click flask-cli

18
推荐指数
2
解决办法
9645
查看次数

烧瓶命令错误:没有这样的命令[“create_db”]

我想使用“flask”命令从终端运行一些命令,但它不起作用。

\n\n

以下是我的项目结构-

\n\n
FlaskUserAuthentication\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 FlaskUserAuthentication\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 API\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 db_models.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 routes.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Site\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 routes.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 static\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 form_style.css\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 templates\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0     \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 Site\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 base_layout.html\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 index.html\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 logout.html\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 profile.html\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 signin.html\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0         \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 signup.html\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 commands.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 run.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 venv\n
Run Code Online (Sandbox Code Playgroud)\n\n

作为flask run命令运行应用程序时,我确信我的环境变量设置正确。但是,当我尝试使用 Flask-cli-command 时,例如 -

\n\n
flask create_db\n
Run Code Online (Sandbox Code Playgroud)\n\n

我明白了,Error: No such command "create_db". …

python environment-variables command-line-arguments flask flask-cli

6
推荐指数
1
解决办法
9369
查看次数

Flask CLI命令和参数

你如何让Flask CLI命令接受一个参数?

Flask似乎自定义了Click Group对象,所以这不起作用:

@app.cli.command()
@app.cli.argument('email')
def user_info(email):
    ...
Run Code Online (Sandbox Code Playgroud)

python flask python-click flask-cli

4
推荐指数
1
解决办法
2527
查看次数

使用PyCharm调试器运行Flask CLI命令

我在Flask中创建了一个自定义CLI命令,我可以flask my_command在终端中运行.我想使用PyCharm的调试器运行此命令.

我创建了一个"Flask服务器"配置,并使用PyCharm调试器运行它在我在视图函数内设置的断点处停止.但是如果我尝试从PyCharm的终端运行我的CLI命令,它不会在命令中的断点处停止.

我是否需要自定义配置来调试自定义CLI命令?我发现了一个关于Django命令的问题,但PyCharm的"Flask服务器"配置没有相同的选项.如何配置PyCharm来调试Flask CLI命令?

python pycharm flask flask-cli

4
推荐指数
1
解决办法
1336
查看次数

当我使用flask cli运行我的应用程序时,为什么会出现错误“未从...获得有效的Flask应用程序”?

我尝试使用flask cli启动我的应用程序,即flask run。我使用FLASK_APP环境变量指向我的应用程序,即export FLASK_APP=package_name.wsgi:app

在我的wsgi.py文件中,我使用工厂函数创建应用,即app = create_app(config),我的create_app方法如下所示:

def create_app(config_object=LocalConfig):
    app = connexion.App(config_object.API_NAME,
                    specification_dir=config_object.API_SWAGGER_DIR,
                    debug=config_object.DEBUG)
    app.app.config.from_object(config_object)
    app.app.json_encoder = JSONEncoder
    app.add_api(config_object.API_SWAGGER_YAML,
            strict_validation=config_object.API_SWAGGER_STRICT,
            validate_responses=config_object.API_SWAGGER_VALIDATE)
    app = register_extensions(app)
    app = register_blueprints(app)
    return app
Run Code Online (Sandbox Code Playgroud)

但是,该应用程序无法启动,出现错误:

无法从“ package_name.wsgi:app”获得有效的Flask应用程序。

为什么是这样?

当我使用gunicorn时,我可以正常启动我的应用程序,即 gunicorn package_name.wsgi:app

flask flask-cli

3
推荐指数
1
解决办法
460
查看次数

Flask CLI 命令不在 __init__.py 文件中

我正在尝试添加commands到我的 Flask 应用程序中。

这是我的__init__.py文件:

import os

from flask import Flask
from flask_cors import CORS
from flask_mongoengine import MongoEngine

app = Flask(__name__)
CORS(app)
app.config.from_object(os.environ['APP_SETTINGS'])

db = MongoEngine(app)

import slots_tracker_server.views  # noqa
Run Code Online (Sandbox Code Playgroud)

如果我添加它:

@app.cli.command()
def test_run():
    print('here')
Run Code Online (Sandbox Code Playgroud)

我可以flask test_run毫无问题地运行,但如果我尝试将代码移动到另一个文件,例如: ,我在尝试运行命令时commands.py会收到错误。Error: No such command "test_run".

我缺少什么?

python flask flask-cli

2
推荐指数
1
解决办法
2280
查看次数

在CLI命令中访问Flask应用上下文

我想注册一个在Flask应用程序工厂的单独文件中定义的CLI命令。此命令需要访问app.config。但是,current_app.config从命令访问会引发RuntimeError: Working outside of application context.

app/__init__.py

from flask import Flask
from app.commands import my_command

def create_app():
    app = Flask(__name__, instance_relative_config=True)
    app.config.from_pyfile("config.py")
    app.add_command(my_command)
    return app
Run Code Online (Sandbox Code Playgroud)

instance/config.py

TEST_VARIABLE = "TESTVALUE"
Run Code Online (Sandbox Code Playgroud)

app/commands.py

from flask import current_app

@click.command()
def my_command():
    click.echo(current_app.config["TEST_VARIABLE"])
Run Code Online (Sandbox Code Playgroud)

我希望能运行flask my_command输出TESTVALUE。但是,出现以下错误:

RuntimeError: Working outside of application context.

This typically means that you attempted to use functionality that needed
to interface with the current application object in some way. To solve
this, set …
Run Code Online (Sandbox Code Playgroud)

python click flask flask-cli

2
推荐指数
1
解决办法
2961
查看次数

Flask-CLI 无法运行应用程序?

我正在使用flask 和flask-restful 开发REST API。我目前在使用flask-cli 时遇到问题,因为在公司环境中我无法运行该应用程序。可能是什么问题?

在企业中,我们使用 conda 环境,用于 python 3 应用程序。目前api的环境由python 3.6.8和flask 1.0.2和flask-restful 0.37组成,在CentOS 7上运行。即使通过conda的需求或enviroment.yml重新创建环境,我也无法运行应用程序,不同从我的个人机器 ubuntu 18.04,使用 miniconda3 和 env python 3.6.8,使用相同的烧瓶包,我可以毫无问题地进行测试。

错误:

  File "/home/user/opt/miniconda3/envs/comands/lib/python3.6/site-packages/flask/cli.py", line 235, in locate_app
    __import__(module_name)
ModuleNotFoundError: No module named 'main'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/user/opt/miniconda3/envs/comands/lib/python3.6/site-packages/flask/cli.py", line 325, in __call__
    self._flush_bg_loading_exception()
  File "/home/user/opt/miniconda3/envs/comands/lib/python3.6/site-packages/flask/cli.py", line 313, in _flush_bg_loading_exception
    reraise(*exc_info)
  File "/home/user/opt/miniconda3/envs/comands/lib/python3.6/site-packages/flask/_compat.py", line 35, in reraise
    raise value
  File "/home/user/opt/miniconda3/envs/comands/lib/python3.6/site-packages/flask/cli.py", line 302, in _load_app
    self._load_unlocked()
  File "/home/user/opt/miniconda3/envs/comands/lib/python3.6/site-packages/flask/cli.py", …
Run Code Online (Sandbox Code Playgroud)

python flask flask-cli

0
推荐指数
1
解决办法
4632
查看次数