Flask內置命令行工具—CLI

應用發現

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.pyapp.py文件並探測應用實例或工廠函數。flask命令在給定的導入內尋找一個名爲app或者application的應用實例,若是找不到會繼續尋找任意應用實例。若是找不到任何實例,會接着尋找名爲create_app或者make_app的工廠函數,使用該函數返回的實例。this

flask run

運行開發服務器。不消說,不要在生產環境使用

flask shell

開啓一個交互式的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

執行數據庫遷移相關操做。flask db指令不能直接使用,須要獲取Migrate實例。

from flask_migrate import Migrate

migrate = Migrate(app, db)

環境

經過FLASK_ENV變量設置Flask應用的運行環境。可選值包括production(默認)和development
若是設置爲development,flask命令將激活debug模式,執行flask run會啓用交互式調試器和代碼自動重載。

DEBUG模式

設置FLASK_ENV爲development時,會自動激活debug模式。也能夠經過FLASK_DEBUG變量單獨控制,1表示啓用,0表示禁用

經過dotenv設置環境變量

經過virtualenv設置環境變量

自定義命令

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的值)

PyCharm 集成

相關文章
相關標籤/搜索