美文网首页
Flask内置命令行工具—CLI

Flask内置命令行工具—CLI

作者: 忘了呼吸的那只猫 | 来源:发表于2019-06-18 17:28 被阅读0次

flask命令在Flask库安装后可使用,使用前需要正确配置FLASK_APP环境变量以告知用户程序所在位置。不同平台设置方式有所不同。

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环境变量分三部分:

  • 一个设置当前工作目录的可选路径
  • 一个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_APPflask命令会查找wsgi.pyapp.py文件并探测应用实例或工厂函数。flask命令在给定的导入内寻找一个名为app或者application的应用实例,如果找不到会继续寻找任意应用实例。如果找不到任何实例,会接着寻找名为create_app或者make_app的工厂函数,使用该函数返回的实例。

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
如果设置为developmentflask命令将激活debug模式,执行flask run会启用交互式调试器和代码自动重载。

DEBUG模式

设置FLASK_ENVdevelopment时,会自动激活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,如果想使用其他指令调用,可以在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()装饰器添加的命令在执行时自动推入应用上下文。

如果使用Clickcommand()装饰器添加命令,执行时不会自动推入应用上下文,要想达到同样的效果,增加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

相关文章

  • Flask内置命令行工具—CLI

    flask命令在Flask库安装后可使用,使用前需要正确配置FLASK_APP环境变量以告知用户程序所在位置。不同...

  • Flask CLI

    一、说明 Flask-CLI (flask.cli)是 Flask 内置的脚本命令接口,基于 Click 实现的,...

  • SKIL/工作流程/命令行

    命令行 (CLI) SKIL带有一个内置的命令行界面(CLI),用于高级设置和管理任务。有时,你需要用特殊变量手动...

  • 短小精悍之 Redis 命令行工具有趣的罕见用法

    我们天天都在使用 Redis 内置的命令行工具 redis-cli,久而久之以为它就是一个简单的交互式 Redis...

  • 短小精悍之 Redis 命令行工具有趣的罕见用法

    我们天天都在使用 Redis 内置的命令行工具 redis-cli,久而久之以为它就是一个简单的交互式 Redis...

  • vue-cli的简介

    1.安装脚手架工具vue-cli(命令行) 全局安装vue-cli Mac打开终端,windows打开命令行工具输...

  • Squoosh-cli的代码解析

    cli是libsquoosh的命令行工具,可以直接在命令行中直接运行。 Cli的核心流程分析 cli使用comma...

  • Flask 源码(2)

    上文提到 flask 统一入口到 cli.py 使用场景 package 的常见入口是包引用和 cli 命令行使用...

  • Angular 2构建项目心得

    (一)angular-cli Angular 提供了一个命令行工具angular-cli,它能让用户通过命令行创建...

  • 03、Vue-cli构建项目

    一、Vue-cli脚手架工具 Vue-cli是Vue的脚手架工具,是官方命令行工具 (CLI),脚手架即编写好基础...

网友评论

      本文标题:Flask内置命令行工具—CLI

      本文链接:https://www.haomeiwen.com/subject/gmofqctx.html