Flask內置命令行工具—CLI

flask命令在Flask庫安裝后可使用,使用前需要正確配置FLASK_APP環(huán)境變量以告知用戶程序所在位置。不同平臺設置方式有所不同。

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)境變量分三部分:

  • 一個設置當前工作目錄的可選路徑
  • 一個python文件或帶"."的導入路徑
  • 一個可選的應用實例或工廠函數變量名。如果是工廠函數,可以后跟括號傳入要接收的參數。
FLASK_APP=src/hello
設置src為當前工作目錄,并導入hello

FLASK_APP=hello.web
導入hello.web

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的應用實例,如果找不到會繼續(xù)尋找任意應用實例。如果找不到任何實例,會接著尋找名為create_app或者make_app的工廠函數,使用該函數返回的實例。

flask run

運行開發(fā)服務器。不消說,不要在生產環(huán)境使用

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

執(zhí)行數據庫遷移相關操作。flask db指令不能直接使用,需要獲取Migrate實例。

from flask_migrate import Migrate

migrate = Migrate(app, db)

環(huán)境

通過FLASK_ENV變量設置Flask應用的運行環(huán)境??蛇x值包括production(默認)和development
如果設置為development,flask命令將激活debug模式,執(zhí)行flask run會啟用交互式調試器和代碼自動重載。

DEBUG模式

設置FLASK_ENVdevelopment時,會自動激活debug模式。也可以通過FLASK_DEBUG變量單獨控制,1表示啟用,0表示禁用

通過dotenv設置環(huán)境變量

通過virtualenv設置環(huán)境變量

自定義命令

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,如果想使用其他指令調用,可以在app.cli.command()中傳入 "你想要的指令"。

下列代碼演示了和上面相同的功能,但將打印用戶的命令添加到了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

應用上下文

使用Flask應用的.cli.command()裝飾器添加的命令在執(zhí)行時自動推入應用上下文。

如果使用Clickcommand()裝飾器添加命令,執(zhí)行時不會自動推入應用上下文,要想達到同樣的效果,增加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)

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

@app.cli.command(with_appcontext=False)
def do_work():
    pass
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 這幾天想學新東西,就看了flask框架,本身對python不太了解,網上的很多教程看了,總是在某些地方卡住。翻到一...
    易木成華閱讀 2,405評論 0 11
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,353評論 0 10
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,681評論 1 32
  • 官網 中文版本 好的網站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,727評論 0 5
  • 秋風起葉破碎。劫難了訴人醉 青石板跌宕去。年輪圈圈枯萎 風吹響鈴搖偎。漂泊的云浮悲 流水清幽潺瑟瑟。冰暖化了誰 秋...
    積極廢人_閱讀 601評論 0 5

友情鏈接更多精彩內容