Flask CLI


一、說明

Flask-CLI (flask.cli)是 Flask 內置的腳本命令接口,基於 Click 實現的,深入了解請參考 Click 文檔(官方文檔) 。可以替代 Flask-Script 實現的功能。

二、簡單說明click

Click 是 Flask 的開發團隊 Pallets 的另一款開源項目,它是用於快速創建命令行的第三方模塊。

我們知道,Python 內置了一個 Argparse 的標准庫用於創建命令行,但使用起來有些繁瑣,Click 相比於 Argparse,就好比 requests 相比於 urllib

Click 對argparse 的主要改進在易用性,使用Click 分為兩個步驟:

  1. 使用 @click.command() 裝飾一個函數,使之成為命令行接口;
  2. 使用 @click.option() 等裝飾函數,為其添加命令行選項等。

看一下官方文檔的入門例子:

import click
  
@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name', help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)
  
if __name__ == '__main__':
    hello()

在上面的例子中,函數 hello 有兩個參數:count 和 name,它們的值從命令行中獲取。

  • @click.command() 使函數 hello 成為命令行接口;

  • @click.option 的第一個參數指定了命令行選項的名稱,可以看到,count 的默認值是 1;

  • 使用 click.echo 進行輸出是為了獲得更好的兼容性,因為 print 在 Python2 和 Python3 的用法有些差別。

 

執行情況

$ python hello.py
Your name: Ethan           # 這里會顯示 'Your name: '(對應代碼中的 prompt),接受用戶輸入
Hello Ethan!
  
$ python hello.py --help   # click 幫我們自動生成了 `--help` 用法
Usage: hello.py [OPTIONS]
  
  Simple program that greets NAME for a total of COUNT times.
  
Options:
  --count INTEGER  Number of greetings.
  --name TEXT      The person to greet.
  --help           Show this message and exit.
  
$ python hello.py --count 3 --name Ethan    # 指定 count 和 name 的值
Hello Ethan!
Hello Ethan!
Hello Ethan!
  
$ python hello.py --count=3 --name=Ethan    # 也可以使用 `=`,和上面等價
Hello Ethan!
Hello Ethan!
Hello Ethan!
  
$ python hello.py --name=Ethan              # 沒有指定 count,默認值是 1
Hello Ethan!

Group使用

Click 通過 group 來創建一個命令行組,也就是說它可以有各種參數來解決相同類別的不同問題

import click

@click.group()
def cli():
    pass

@click.command()
def initdb():
    click.echo('Initialized the database')
····
@click.command()
def dropdb():
    click.echo('Droped the database')

cli.add_command(initdb)
cli.add_command(dropdb)

if __name__ == "__main__":
    cli()

執行情況:

$ python hello.py
Usage: hello.py [OPTIONS] COMMAND [ARGS]...

Options:
  --help  Show this message and exit.

Commands:
  dropdb
  initdb
$ python hello.py initdb
Initialized the database
$ python hello.py dropdb
Droped the database

三、Flask-cli

終端環境變量聲明

  • Unix Bash ( Linux 、Mac 及其他):
$ export FLASK_APP=hello 
$ flask run
  • Windows CMD:
> set FLASK_APP=hello > flask run
  • Windows PowerShell:
> $env:FLASK_APP = "hello" > flask run

四、Flask項目運行

  • 可以通過在一個空的文件目錄下執行 flask 命令得知,項目中有三種方式使用 flask 腳本。
flask 會通過自動檢測項目中命名為 wsgi.py 或 app.py 的文件,另一種方式是使用環境變量管理 python-dotenvenvirons ,通過編輯配置文件 .env 或 .flaskenv 中的 FLASK_APP,運行flask 命令 。

Usage: flask shell [OPTIONS]

Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory.

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM