flask命令在Flask庫安裝后可使用,使用前需要正確配置FLASK_APP
環(huán)境變量以告知用戶程序所在位置。不同平臺設(shè)置方式有所不同。
Unix Bash (Linux, Mac, etc.):
$ export FLASK_APP=hello$ flask run
Windows CMD:
> set FLASK_APP=hello> flask run
Windows PowerShell:
> $env:FLASK_APP="hello"> flask run
FLASK_APP環(huán)境變量分三部分:一個設(shè)置當前工作目錄的可選路徑,一個python文件或帶"."的導入路徑,一個可選的應用實例或工廠函數(shù)變量名。如果是工廠函數(shù),可以后跟括號傳入要接收的參數(shù)。
FLASK_APP=src/hello
設(shè)置src為當前工作目錄,并導入hello
FLASK_APP=hello.web
導入hello.web
FLASK_APP=hello:app2
使用hello中的app2實例
FLASK_APP=hello:create_app('dev')
使用hello中的工廠函數(shù)create_app并傳入?yún)?shù)dev
如果未設(shè)置FLASK_APP,flask命令會查找wsgi.py
或app.py
文件并探測應用實例或工廠函數(shù)。flask命令在給定的導入內(nèi)尋找一個名為app
或者application
的應用實例,如果找不到會繼續(xù)尋找任意應用實例。如果找不到任何實例,會接著尋找名為create_app
或者make_app
的工廠函數(shù),使用該函數(shù)返回的實例。
運行開發(fā)服務(wù)器。不消說,不要在生產(chǎn)環(huán)境使用
開啟一個交互式的python shell,用來訪問或處理應用數(shù)據(jù)。該指令默認激活應用上下文,并導入應用實例。
只有應用實例是默認導入的,如果需要導入其他對象,使用shell_context_processor
裝飾函數(shù),返回一個字典對象,鍵值對表示額外導入的對象。
from exts import db, models@app.shell_context_processordef make_shell_context(): return dict(models=models, db=db)
執(zhí)行數(shù)據(jù)庫遷移相關(guān)操作。flask db
指令不能直接使用,需要獲取Migrate實例。
from flask_migrate import Migratemigrate = Migrate(app, db)
通過FLASK_ENV
變量設(shè)置Flask應用的運行環(huán)境??蛇x值包括production
(默認)和development
。
如果設(shè)置為development,flask命令將激活debug模式,執(zhí)行flask run會啟用交互式調(diào)試器和代碼自動重載。
設(shè)置FLASK_ENV為development時,會自動激活debug模式。也可以通過FLASK_DEBUG
變量單獨控制,1表示啟用,0表示禁用
略
略
flask命令基于Click庫實現(xiàn)。
下列代碼演示添加帶有name參數(shù)的print-user命令:
import clickfrom flask import Flaskapp = Flask(__name__)@app.cli.command()@click.argument("name")def print_user(name): print("this is", name)
運行方式:flask print-user root
。注意這里的指令是print-user
,使用print_user會提示沒有這個指令,除非顯示地在app.cli.command()中傳入"print_user"。
下列代碼演示了和上面相同的功能,但將打印用戶的命令添加到了user命令組。命令組可用于管理多個相關(guān)的命令:
import clickfrom flask import Flaskfrom flask.cli import AppGroupapp = Flask(__name__)user_cli = AppGroup("user")@user_cli.command("print")@click.argument("name")def print_user(name): print("this is", name)app.cli.add_command(user_cli)
運行方式:flask user print root
要測試自定義命令,參考Testing CLI Commands
使用Flask應用的.cli.command()
裝飾器添加的命令在執(zhí)行時自動推入應用上下文。
如果使用Click的command()
裝飾器添加命令,執(zhí)行時不會自動推入應用上下文,要想達到同樣的效果,增加with_appcontext
裝飾器:
import clickfrom flask import Flask, current_appfrom flask.cli import with_appcontextapp = Flask(__name__)@click.command()@with_appcontextdef do_work(): print("do work") print(current_app)app.cli.add_command(do_work)
如果命令不需要在應用上下文中執(zhí)行,可以顯示地禁用:
@app.cli.command(with_appcontext=False)def do_work(): pass
略(在setup.py中配置entry_points
->flask.commands
的值)
略(針對使用工廠函數(shù)生成應用實例的情況,在setup.py中配置entry_points
->console_scripts
的值)
略
查看原文: Flask內(nèi)置命令行工具—CLI