Flask內(nèi)置命令行工具—CLI

flask命令在Flask庫(kù)安裝后可使用轻猖,使用前需要正確配置FLASK_APP環(huán)境變量以告知用戶程序所在位置能扒。不同平臺(tái)設(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)境變量分三部分:

  • 一個(gè)設(shè)置當(dāng)前工作目錄的可選路徑
  • 一個(gè)python文件或帶"."的導(dǎo)入路徑
  • 一個(gè)可選的應(yīng)用實(shí)例或工廠函數(shù)變量名坎弯。如果是工廠函數(shù),可以后跟括號(hào)傳入要接收的參數(shù)桦锄。
FLASK_APP=src/hello
設(shè)置src為當(dāng)前工作目錄幔亥,并導(dǎo)入hello

FLASK_APP=hello.web
導(dǎo)入hello.web

FLASK_APP=hello:app2
使用hello中的app2實(shí)例

FLASK_APP=hello:create_app('dev')
使用hello中的工廠函數(shù)create_app并傳入?yún)?shù)dev

注意:

如果未設(shè)置FLASK_APPflask命令會(huì)查找wsgi.pyapp.py文件并探測(cè)應(yīng)用實(shí)例或工廠函數(shù)察纯。flask命令在給定的導(dǎo)入內(nèi)尋找一個(gè)名為app或者application的應(yīng)用實(shí)例,如果找不到會(huì)繼續(xù)尋找任意應(yīng)用實(shí)例针肥。如果找不到任何實(shí)例饼记,會(huì)接著尋找名為create_app或者make_app的工廠函數(shù),使用該函數(shù)返回的實(shí)例慰枕。

flask run

運(yùn)行開(kāi)發(fā)服務(wù)器具则。不消說(shuō),不要在生產(chǎn)環(huán)境使用

flask shell

開(kāi)啟一個(gè)交互式的python shell具帮,用來(lái)訪問(wèn)或處理應(yīng)用數(shù)據(jù)博肋。該指令默認(rèn)激活應(yīng)用上下文低斋,并導(dǎo)入應(yīng)用實(shí)例。

只有應(yīng)用實(shí)例是默認(rèn)導(dǎo)入的匪凡,如果需要導(dǎo)入其他對(duì)象膊畴,使用shell_context_processor裝飾函數(shù),返回一個(gè)字典對(duì)象病游,鍵值對(duì)表示額外導(dǎo)入的對(duì)象唇跨。


from exts import db, models

@app.shell_context_processor
def make_shell_context():
    return dict(models=models, db=db)

flask db

執(zhí)行數(shù)據(jù)庫(kù)遷移相關(guān)操作。flask db指令不能直接使用衬衬,需要獲取Migrate實(shí)例买猖。

from flask_migrate import Migrate

migrate = Migrate(app, db)

環(huán)境

通過(guò)FLASK_ENV變量設(shè)置Flask應(yīng)用的運(yùn)行環(huán)境∽涛荆可選值包括production(默認(rèn))和development玉控。
如果設(shè)置為developmentflask命令將激活debug模式狮惜,執(zhí)行flask run會(huì)啟用交互式調(diào)試器和代碼自動(dòng)重載高诺。

DEBUG模式

設(shè)置FLASK_ENVdevelopment時(shí),會(huì)自動(dòng)激活debug模式讽挟。也可以通過(guò)FLASK_DEBUG變量單獨(dú)控制懒叛,1表示啟用,0表示禁用

通過(guò)dotenv設(shè)置環(huán)境變量

通過(guò)virtualenv設(shè)置環(huán)境變量

自定義命令

flask命令基于Click庫(kù)實(shí)現(xiàn)耽梅。
下列代碼演示添加帶有name參數(shù)的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)

運(yùn)行方式:flask print-user root薛窥。注意這里的指令是print-user,如果想使用其他指令調(diào)用眼姐,可以在app.cli.command()中傳入 "你想要的指令"诅迷。

下列代碼演示了和上面相同的功能,但將打印用戶的命令添加到了user命令組众旗。命令組可用于管理多個(gè)相關(guān)的命令:

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)

運(yùn)行方式:flask user print root

應(yīng)用上下文

使用Flask應(yīng)用的.cli.command()裝飾器添加的命令在執(zhí)行時(shí)自動(dòng)推入應(yīng)用上下文罢杉。

如果使用Clickcommand()裝飾器添加命令,執(zhí)行時(shí)不會(huì)自動(dòng)推入應(yīng)用上下文贡歧,要想達(dá)到同樣的效果滩租,增加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)

如果命令不需要在應(yīng)用上下文中執(zhí)行,可以顯示地禁用:

@app.cli.command(with_appcontext=False)
def do_work():
    pass
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末利朵,一起剝皮案震驚了整個(gè)濱河市律想,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌绍弟,老刑警劉巖技即,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異樟遣,居然都是意外死亡而叼,警方通過(guò)查閱死者的電腦和手機(jī)身笤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)葵陵,“玉大人液荸,你說(shuō)我怎么就攤上這事“D眩” “怎么了莹弊?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)涡尘。 經(jīng)常有香客問(wèn)我忍弛,道長(zhǎng),這世上最難降的妖魔是什么考抄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任细疚,我火速辦了婚禮,結(jié)果婚禮上川梅,老公的妹妹穿的比我還像新娘疯兼。我一直安慰自己,他們只是感情好贫途,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布吧彪。 她就那樣靜靜地躺著,像睡著了一般丢早。 火紅的嫁衣襯著肌膚如雪姨裸。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天怨酝,我揣著相機(jī)與錄音傀缩,去河邊找鬼。 笑死农猬,一個(gè)胖子當(dāng)著我的面吹牛赡艰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斤葱,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼慷垮,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了揍堕?” 一聲冷哼從身側(cè)響起料身,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鹤啡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蹲嚣,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡递瑰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年祟牲,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抖部。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡说贝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慎颗,到底是詐尸還是另有隱情乡恕,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布俯萎,位于F島的核電站傲宜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏夫啊。R本人自食惡果不足惜函卒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撇眯。 院中可真熱鬧报嵌,春花似錦、人聲如沸熊榛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)玄坦。三九已至血筑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間营搅,已是汗流浹背云挟。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留转质,地道東北人园欣。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像休蟹,于是被迫代替她去往敵國(guó)和親沸枯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 這幾天想學(xué)新東西赂弓,就看了flask框架绑榴,本身對(duì)python不太了解,網(wǎng)上的很多教程看了盈魁,總是在某些地方卡住翔怎。翻到一...
    易木成華閱讀 2,235評(píng)論 0 11
  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 5,744評(píng)論 0 10
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,101評(píng)論 1 32
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,381評(píng)論 0 5
  • 秋風(fēng)起葉破碎。劫難了訴人醉 青石板跌宕去赤套。年輪圈圈枯萎 風(fēng)吹響鈴搖偎飘痛。漂泊的云浮悲 流水清幽潺瑟瑟。冰暖化了誰(shuí) 秋...
    積極廢人_閱讀 562評(píng)論 0 5