m0e*_*taz 18 python command-line-interface flask python-click flask-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会导致循环导入错误。
如何在单独的文件中创建自定义命令?
emo*_*t01 19
实现这一目标的一种方法是使用蓝图
我已经使用 Flask 1.1.1 对其进行了测试,因此请务必检查您拥有的正确版本的文档。
这是一般的想法:
==> app.py <==
from flask import Flask
from commands import usersbp
app = Flask(__name__)
# you MUST register the blueprint
app.register_blueprint(usersbp)
Run Code Online (Sandbox Code Playgroud)
==> 命令.py <==
import click
from flask import Blueprint
usersbp = Blueprint('users', __name__)
@usersbp.cli.command('create')
@click.argument('name')
def create(name):
""" Creates a user """
print("Create user: {}".format(name))
Run Code Online (Sandbox Code Playgroud)
执行后,flask users您应该得到如下响应:
flask users
Usage: flask users [OPTIONS] COMMAND [ARGS]...
Options:
--help Show this message and exit.
Commands:
create Creates a user
Run Code Online (Sandbox Code Playgroud)
只需将其导入您的应用工厂
dir tree
my_app
L app.py
L commands.py
Run Code Online (Sandbox Code Playgroud)
命令.py
dir tree
my_app
L app.py
L commands.py
Run Code Online (Sandbox Code Playgroud)
应用程序
@app.cli.command('resetdb')
def resetdb_command():
"""Here info that will be shown in flask --help"""
pass
Run Code Online (Sandbox Code Playgroud)
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URL
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
with app.app_context():
from . import routes
from . import commands # <----- here
return app
Run Code Online (Sandbox Code Playgroud)
但必须有更好的方法 ;) 我现在不知道
| 归档时间: |
|
| 查看次数: |
9645 次 |
| 最近记录: |