flask命令在Flask庫安裝後可以使用,使用前須要正確配置FLASK_APP
環境變量以告知用戶程序所在位置。不一樣平臺設置方式有所不一樣。python
Unix Bash (Linux, Mac, etc.):web
$ export FLASK_APP=hello $ flask run
Windows CMD:shell
> set FLASK_APP=hello > flask run
Windows PowerShell:數據庫
> $env:FLASK_APP="hello" > flask run
FLASK_APP環境變量分三部分:一個設置當前工做目錄的可選路徑,一個python文件或帶"."的導入路徑,一個可選的應用實例或工廠函數變量名。若是是工廠函數,能夠後跟括號傳入要接收的參數。flask
FLASK_APP=src/hello
設置src爲當前工做目錄,並導入hello服務器
FLASK_APP=hello.web
導入hello.webapp
FLASK_APP=hello:app2
使用hello中的app2實例函數
FLASK_APP=hello:create_app('dev')
使用hello中的工廠函數create_app並傳入參數dev測試
若是未設置FLASK_APP,flask命令會查找wsgi.py
或app.py
文件並探測應用實例或工廠函數。flask命令在給定的導入內尋找一個名爲app
或者application
的應用實例,若是找不到會繼續尋找任意應用實例。若是找不到任何實例,會接着尋找名爲create_app
或者make_app
的工廠函數,使用該函數返回的實例。this
運行開發服務器。不消說,不要在生產環境使用
開啓一個交互式的python shell,用來訪問或處理應用數據。該指令默認激活應用上下文,並導入應用實例。
只有應用實例是默認導入的,若是須要導入其餘對象,使用shell_context_processor
裝飾函數,返回一個字典對象,鍵值對錶示額外導入的對象。
from exts import db, models @app.shell_context_processor def make_shell_context(): return dict(models=models, db=db)
執行數據庫遷移相關操做。flask db
指令不能直接使用,須要獲取Migrate實例。
from flask_migrate import Migrate migrate = Migrate(app, db)
經過FLASK_ENV
變量設置Flask應用的運行環境。可選值包括production
(默認)和development
。
若是設置爲development,flask命令將激活debug模式,執行flask run會啓用交互式調試器和代碼自動重載。
設置FLASK_ENV爲development時,會自動激活debug模式。也能夠經過FLASK_DEBUG
變量單獨控制,1表示啓用,0表示禁用
略
略
flask命令基於Click庫實現。
下列代碼演示添加帶有name參數的print-user命令:
import click from flask import Flask app = 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命令組。命令組可用於管理多個相關的命令:
import click from flask import Flask from flask.cli import AppGroup app = 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()
裝飾器添加的命令在執行時自動推入應用上下文。
若是使用Click的command()
裝飾器添加命令,執行時不會自動推入應用上下文,要想達到一樣的效果,增長with_appcontext
裝飾器:
import click from flask import Flask, current_app from flask.cli import with_appcontext app = Flask(__name__) @click.command() @with_appcontext def do_work(): print("do work") print(current_app) app.cli.add_command(do_work)
若是命令不須要在應用上下文中執行,能夠顯示地禁用:
@app.cli.command(with_appcontext=False) def do_work(): pass
略(在setup.py中配置entry_points
->flask.commands
的值)
略(針對使用工廠函數生成應用實例的狀況,在setup.py中配置entry_points
->console_scripts
的值)
略