博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flask内置命令行工具—CLI
阅读量:6244 次
发布时间:2019-06-22

本文共 2544 字,大约阅读时间需要 8 分钟。

应用发现

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_APP,flask命令会查找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_processordef make_shell_context():    return dict(models=models, db=db)

flask db

执行数据库迁移相关操作。flask db指令不能直接使用,需要获取Migrate实例。

from flask_migrate import Migratemigrate = Migrate(app, db)

环境

通过FLASK_ENV变量设置Flask应用的运行环境。可选值包括production(默认)和development

如果设置为development,flask命令将激活debug模式,执行flask run会启用交互式调试器和代码自动重载。

DEBUG模式

设置FLASK_ENV为development时,会自动激活debug模式。也可以通过FLASK_DEBUG变量单独控制,1表示启用,0表示禁用

通过dotenv设置环境变量

通过virtualenv设置环境变量

自定义命令

flask命令基于库实现。

下列代码演示添加带有name参数的print-user命令:

import clickfrom flask import Flaskapp = Flask(__name__)@app.cli.command()@click.argument("name")def print_user(name):    print("this is", name)

运行方式:flask print-user root注意这里的指令是print-user,使用print_user会提示没有这个指令,除非显示地在app.cli.command()中传入"print_user"。

下列代码演示了和上面相同的功能,但将打印用户的命令添加到了user命令组。命令组可用于管理多个相关的命令:

import clickfrom flask import Flaskfrom flask.cli import AppGroupapp = 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()装饰器添加的命令在执行时自动推入应用上下文。

如果使用Click的command()装饰器添加命令,执行时不会自动推入应用上下文,要想达到同样的效果,增加with_appcontext装饰器:

import clickfrom flask import Flask, current_appfrom flask.cli import with_appcontextapp = Flask(__name__)@click.command()@with_appcontextdef do_work():    print("do work")    print(current_app)app.cli.add_command(do_work)

如果命令不需要在应用上下文中执行,可以显示地禁用:

@app.cli.command(with_appcontext=False)def do_work():    pass

插件

略(在setup.py中配置entry_points->flask.commands的值)

自定义脚本

略(针对使用工厂函数生成应用实例的情况,在setup.py中配置entry_points->console_scripts的值)

PyCharm 集成

转载地址:http://etpia.baihongyu.com/

你可能感兴趣的文章
结对编程 VS 代码审查:对比开发者文化
查看>>
用消除重复的加密工具备份数据
查看>>
《电路分析导论(原书第12版)》一1.4.1 算法语言
查看>>
PNG 图片处理库 libpng 曝出漏洞,已初步修复
查看>>
Go 开发的 IM 和推送服务 goim
查看>>
高危漏洞预警:WordPress Core 多个高危漏洞
查看>>
《DNS与BIND(第5版)》——1.5 一定要使用DNS吗
查看>>
"挖掘机指数"告诉你不一样的中国经济
查看>>
看麦肯锡如何分析中国城市群
查看>>
《数据分析变革:大数据时代精准决策之道》一1.4 全面看待运营型分析
查看>>
一分钟自我介绍:阿里云CDN
查看>>
《iOS 8开发指南》——第6章,第6.5节实战演练——使用模板Single View Application...
查看>>
【观点】离开了信息化,大数据就是为他人作嫁衣
查看>>
《HTML5+CSS3网页设计入门必读》——1.4 分裂:WHATWG TF
查看>>
《JavaScript核心概念及实践》——第2章 基本概念 2.1 数据类型
查看>>
Linux有问必答:如何修复"fatal error: jsoncpp/json/json.h: No such file..."
查看>>
阿里数据库内核月报:2016年11月
查看>>
简单了解Disruptor(一)
查看>>
编写更好 Bash 脚本的 8 个建议
查看>>
Mavens实战 1.5小结
查看>>