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.

 

 

posted @ 2022-02-23 13:18  清风_Z  阅读(1030)  评论(0编辑  收藏  举报