flask命令在Flask库安装后可以使用,使用前须要正确配置FLASK_APP
环境变量以告知用户程序所在位置。不一样平台设置方式有所不一样。python
Unix Bash (Linux, Mac, etc.):web
$ export FLASK_APP=hello $ flask run
Windows CMD:shell
> set FLASK_APP=hello > flask run
Windows PowerShell:数据库
> $env:FLASK_APP="hello" > flask run
FLASK_APP环境变量分三部分:一个设置当前工做目录的可选路径,一个python文件或带"."的导入路径,一个可选的应用实例或工厂函数变量名。若是是工厂函数,能够后跟括号传入要接收的参数。flask
FLASK_APP=src/hello
设置src为当前工做目录,并导入hello服务器
FLASK_APP=hello.web
导入hello.webapp
FLASK_APP=hello:app2
使用hello中的app2实例函数
FLASK_APP=hello:create_app('dev')
使用hello中的工厂函数create_app并传入参数dev测试
若是未设置FLASK_APP,flask命令会查找wsgi.py
或app.py
文件并探测应用实例或工厂函数。flask命令在给定的导入内寻找一个名为app
或者application
的应用实例,若是找不到会继续寻找任意应用实例。若是找不到任何实例,会接着寻找名为create_app
或者make_app
的工厂函数,使用该函数返回的实例。this
运行开发服务器。不消说,不要在生产环境使用
开启一个交互式的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
指令不能直接使用,须要获取Migrate实例。
from flask_migrate import Migrate migrate = Migrate(app, db)
经过FLASK_ENV
变量设置Flask应用的运行环境。可选值包括production
(默认)和development
。
若是设置为development,flask命令将激活debug模式,执行flask run会启用交互式调试器和代码自动重载。
设置FLASK_ENV为development时,会自动激活debug模式。也能够经过FLASK_DEBUG
变量单独控制,1表示启用,0表示禁用
略
略
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
,使用print_user会提示没有这个指令,除非显示地在app.cli.command()中传入"print_user"。
下列代码演示了和上面相同的功能,但将打印用户的命令添加到了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
要测试自定义命令,参考Testing CLI Commands
使用Flask应用的.cli.command()
装饰器添加的命令在执行时自动推入应用上下文。
若是使用Click的command()
装饰器添加命令,执行时不会自动推入应用上下文,要想达到一样的效果,增长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
略(在setup.py中配置entry_points
->flask.commands
的值)
略(针对使用工厂函数生成应用实例的状况,在setup.py中配置entry_points
->console_scripts
的值)
略