命令行界面¶
在虚拟环境中安装 Flask 时会同时安装 flask 脚本,这是一个 Click 命令 行接口。在终端中执行该脚本可以操作内建的、扩展的和应用定义的命令。关于命令 的更多信息和选择可以通过使用 --help 参数查看。
探索应用¶
' ' flask ' '命令是由flask安装的,而不是您的应用程序;必须告诉它在哪里可以找到您的应用程序才能使用它。' ' FLASK_APP ' '环境变量用于指定如何加载应用程序。
$ export FLASK_APP=hello
$ flask run
> set FLASK_APP=hello
> flask run
> $env:FLASK_APP = "hello"
> flask run
同时 FLASK_APP
支持多种指定应用程序的选项,大多数用例应该很简单。以下是典型值:
- (空)
文件
wsgi.py
已导入,自动检测应用程序(app
)这提供了一种带有额外参数的工厂创建应用程序的简单方法。FLASK_APP=hello
名称被导入,自动检测应用程序(
app
)或工厂 (create_app
)。
FLASK_APP
有三部分:设置当前工作目录的可选路径、python文件或点式导入路径,以及实例或工厂的可选变量名。如果名称是工厂,可以选择在其后面加上括号中的参数。以下值说明了这些部分:
FLASK_APP=src/hello
将当前工作目录设置为
src
然后导入hello
.FLASK_APP=hello.web
导入路径
hello.web
.FLASK_APP=hello:app2
使用
app2
中的Flask实例hello
.FLASK_APP="hello:create_app('dev')"
调用 hello 中的 create_app 工厂,把 'dev' 作为参数。
如果 FLASK_APP
如果未设置,则命令将尝试导入“app”或“wsgi”(作为“.py”文件或包)并尝试检测应用程序实例或工厂。
根据给定的导入,命令会寻找一个名为 app 或者 application 的应用实例。 如果找不到会继续寻找任意应用实例。如果找不到任何实例,会接着寻找名为 create_app 或者 make_app 的函数,使用该函数返回的实例。
如果括号跟在工厂名称后面,它们的内容将被解析为Python文本,并作为参数和关键字参数传递给函数。这意味着字符串必须仍在引号中。
运行开发服务器¶
这个 run
命令将启动开发服务器。在大多数情况下它取代了 Flask.run()
方法。::
$ flask run
* Serving Flask app "hello"
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
警告
不要使用此命令在生产环境中运行应用程序。仅在开发期间使用开发服务器。开发服务器是为方便而提供的,但其设计并非特别安全、稳定或高效。见 部署选择 如何在生产中运行。
打开一个 Shell¶
要探索应用程序中的数据,可以使用 shell
命令。应用程序情境将处于活动状态,应用程序实例将被导入。::
$ flask shell
Python 3.6.2 (default, Jul 20 2017, 03:52:27)
[GCC 7.1.1 20170630] on linux
App: example
Instance: /home/user/Projects/hello/instance
>>>
使用 shell_context_processor()
添加其他自动导入。
环境¶
Changelog
1.0 新版功能.
Flask 应用所运行的环境由 FLASK_ENV 环境变更指定。如果配置该变量, 那么缺省为 production 。另一个可用的环境值是 development 。Flask 和扩展可能基于环境不同而改变行为。
如果环境是 development , flask 命令会开启调试模式并且 flask run 会开启交互调试器和重启器。
$ export FLASK_ENV=development
$ flask run
* Serving Flask app "hello"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with inotify reloader
* Debugger is active!
* Debugger PIN: 223-456-919
> set FLASK_ENV=development
> flask run
* Serving Flask app "hello"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with inotify reloader
* Debugger is active!
* Debugger PIN: 223-456-919
> $env:FLASK_ENV = "development"
> flask run
* Serving Flask app "hello"
* Environment: development
* Debug mode: on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with inotify reloader
* Debugger is active!
* Debugger PIN: 223-456-919
观看额外的文件与重装机¶
使用开发模式时,只要Python代码或导入的模块发生更改,重载程序都会触发。重新加载程序可以使用 --extra-files
option, or the FLASK_RUN_EXTRA_FILES
environment variable. Multiple paths are separated with :
, or `` 在Windows上。
$ flask run --extra-files file1:dirA/file2:dirB/
# or
$ export FLASK_RUN_EXTRA_FILES=file1:dirA/file2:dirB/
$ flask run
* Running on http://127.0.0.1:8000/
* Detected change in '/path/to/file1', reloading
> flask run --extra-files file1:dirA/file2:dirB/
# or
> set FLASK_RUN_EXTRA_FILES=file1:dirA/file2:dirB/
> flask run
* Running on http://127.0.0.1:8000/
* Detected change in '/path/to/file1', reloading
> flask run --extra-files file1:dirA/file2:dirB/
# or
> $env:FLASK_RUN_EXTRA_FILES = "file1:dirA/file2:dirB/"
> flask run
* Running on http://127.0.0.1:8000/
* Detected change in '/path/to/file1', reloading
调试模式¶
如前文所述,当 FLASK_ENV 是 development 时会开启调试模式。 如果想要单独控制调试模式,要使用 FLASK_DEBUG 。值为 1 表示开启, 0 表示关闭。
通过 virturalenv 设置环境变量¶
与其每次打开新的终端都要设置 FLASK_APP,不如使用 Flask 的 dotenv 支持 功能自动设置环境变量。
如果 python-dotenv 已安装,那么运行 flask 会根据 .env 和 .flaskenv 中配置来设置环境变量。这样可以在每次打开 终端后,避免手动设置 FLASK_APP 和其他类似使用环境变量进行配置的服务部署 工作。
命令行设置的变量会重载 .env 中的变量, .env 中的变量会重载 .flaskenv 中的变量。 .flaskenv 应当用于公共变量,如 FLASK_APP 而 .env 则应用用于私有变量,并且不提交到储存库。
为了找到定位文件,将会从运行 flask 的文件夹向上扫描文件夹。 当前工作目录将被设置为文件的位置,假定这是最高级别的项目文件夹。
这些文件只能由``flask``命令或调用 run() 加载。如果想在生产运行时加载这些文件,你应该手动调用 load_dotenv() 。
设置命令参数¶
Click 被配置为根据环境变量为命令选项载入缺省值。变量使用 FLASK_COMMAND_OPTION 模式。例如,要为运行命令设置端口,不使用 flask run --port 8000 ,而是使用:
$ export FLASK_RUN_PORT=8000
$ flask run
* Running on http://127.0.0.1:8000/
> set FLASK_RUN_PORT=8000
> flask run
* Running on http://127.0.0.1:8000/
> $env:FLASK_RUN_PORT = 8000
> flask run
* Running on http://127.0.0.1:8000/
这些可以添加到 .flaskenv 文件,就像 FLASK_APP 来控制缺省命令选项。
禁用 dotenv¶
这个 flask
如果命令检测到dotenv文件,但未安装python dotenv,则会显示一条消息。
$ flask run
* Tip: There are .env files present. Do "pip install python-dotenv" to use them.
通过设置 FLASK_SKIP_DOTENV
环境变量。如果您想手动加载它们,或者您使用的是已经加载它们的项目运行程序,那么这将非常有用。请记住,必须在加载应用程序之前设置环境变量,否则将无法按预期进行配置。
$ export FLASK_SKIP_DOTENV=1
$ flask run
> set FLASK_SKIP_DOTENV=1
> flask run
> $env:FLASK_SKIP_DOTENV = 1
> flask run
通过 virturalenv 设置环境变量¶
如果不想安装 dotenv 支持,可以通过把它们添加到 virtualenv 的 activate 文件末尾来设置环境变量。激活 virtualenv 时会设置环境变量。
Unix BASH, venv/bin/activate
::
$ export FLASK_APP=hello
Windows CMD, venvScriptsactivate.bat
::
> set FLASK_APP=hello
Windows Powershell, venv\Scripts\activate.ps1
::
> $env:FLASK_APP = "hello"
与此相比,最好使用dotenv支持,因为 .flaskenv
可以提交到存储库,当提取项目代码后就可以自动发挥作用。
自定义命令¶
使用' Click ' _实现' ' flask ' '命令。有关编写命令的完整信息,请参阅该项目的文档。
此示例添加了命令 create-user
这是个论据 name
. ::
import click
from flask import Flask
app = Flask(__name__)
@app.cli.command("create-user")
@click.argument("name")
def create_user(name):
...
$ flask create-user admin
以下示例也添加了同样功能的命令,但是以命令组的方式添加的,名为 user create 。这样做有助于组织一组相关的命令:
import click
from flask import Flask
from flask.cli import AppGroup
app = Flask(__name__)
user_cli = AppGroup('user')
@user_cli.command('create')
@click.argument('name')
def create_user(name):
...
app.cli.add_command(user_cli)
$ flask user create demo
关于如何测试自定义命令的概览,参见 测试 CLI 命令 。
用蓝图注册命令¶
如果应用程序使用蓝图,则可以选择直接在蓝图上注册CLI命令。当您的蓝图注册到应用程序中时,相关联的命令将可用于 flask
命令。默认情况下,这些命令将嵌套在与蓝图名称匹配的组中。
from flask import Blueprint
bp = Blueprint('students', __name__)
@bp.cli.command('create')
@click.argument('name')
def create(name):
...
app.register_blueprint(bp)
$ flask students create alice
可以通过指定 cli_group
创建时的参数 Blueprint
对象,或稍后使用 app.register_blueprint(bp, cli_group='...')
. 以下是等效的:
bp = Blueprint('students', __name__, cli_group='other')
# or
app.register_blueprint(bp, cli_group='other')
$ flask other create alice
指定 cli_group=None
将删除嵌套并将命令直接合并到应用程序级别:
bp = Blueprint('students', __name__, cli_group=None)
# or
app.register_blueprint(bp, cli_group=None)
$ flask create alice
应用情境¶
使用 Flask 应用的 cli command() 装饰器添加的命令会在执行 时压入应用情境,这样命令和扩展就可以访问应用和应用的配置。如果使用 Click 的 command() 装饰器创建命令,而不是 Flask 的装饰器,那 么可以使用 with_appcontext() ,达到同样的效果:
import click
from flask.cli import with_appcontext
@click.command()
@with_appcontext
def do_work():
...
app.cli.add_command(do_work)
如果您确定命令不需要情境,可以禁用它::
@app.cli.command(with_appcontext=False)
def do_work():
...
插件¶
Flask 会自动载入在 flask.commands entry point 定义的命令。这样有助于扩展在安装时添加命令。入口点在 setup.py 中定义:
from setuptools import setup
setup(
name='flask-my-extension',
...,
entry_points={
'flask.commands': [
'my-command=flask_my_extension.commands:cli'
],
},
)
在 flask_my_extension/commands.py 内可以导出一个 Click 对象:
import click
@click.command()
def cli():
...
一旦该包与flask项目安装在同一个virtualenv中,就可以运行 flask my-command
调用命令。
自定义脚本¶
使用应用程序工厂模式时,定义自己的单击脚本可能更方便。而不是使用 FLASK_APP
让flask加载您的应用程序,您可以创建自己的click对象并将其导出为 console script 入口点。
创建一个 FlaskGroup 的实例并传递给工厂:
import click
from flask import Flask
from flask.cli import FlaskGroup
def create_app():
app = Flask('wiki')
# other setup
return app
@click.group(cls=FlaskGroup, create_app=create_app)
def cli():
"""Management script for the Wiki application."""
在 setup.py 中定义入口点:
from setuptools import setup
setup(
name='flask-my-extension',
...,
entry_points={
'console_scripts': [
'wiki=wiki:cli'
],
},
)
以可编辑模式在virtualenv中安装应用程序,自定义脚本可用。注意你不需要设置 FLASK_APP
. ::
$ pip install -e .
$ wiki run
自定义脚本中的错误
使用自定义脚本时,如果在模块级代码中引入错误,则重载程序将失败,因为它无法再加载入口点。
在大多数情况下建议使用这个 flask
命令与代码分离,不存在此问题。
Pycharm集成¶
PyCharm Professional提供特殊的烧瓶运行配置。对于社区版,我们需要将其配置为调用 flask run
具有正确环境变量的CLI命令。对于您可能想要使用的任何其他IDE,这些说明应该是类似的。
在Pycharm中,打开项目后,单击 Run 从菜单栏转到编辑配置. 您将看到类似这样的屏幕:

有很多选项需要更改,但是一旦我们对一个命令进行了更改,我们就可以轻松地复制整个配置,并进行一次调整,以使我们能够访问其他命令,包括您自己可能实现的任何自定义命令。
单击+( 添加新配置 )按钮并选择 Python . 为配置命名,例如“flask run”。对于 flask run
命令,检查“仅单个实例”,因为不能同时运行服务器多次。
从( A )下拉框中选择 Module name ,然后输入 flask 。
Parameters 字段( B )用于设置 CLI 命令(可以带参数)。本例中我们使 用 run ,它可用于运行开发服务器。
如果您正在使用 通过 virturalenv 设置环境变量 . 我们需要添加一个环境变量( C )以确定我们的应用程序。单击browse按钮并添加一个带有 FLASK_APP
左边是Python导入或文件在右边 (hello
例如)。添加带有 FLASK_ENV
并将其设置为 development
.
接下来,我们需要将工作目录(d*)设置为应用程序所在的文件夹。
如果已在virtualenv中将项目作为包安装,则可以取消选中 PYTHONPATH 选项(e)。这将更准确地匹配您以后部署应用程序的方式。
点击 Apply 保存配置,或 OK 保存并关闭窗口。在PyCharm主窗口中选择配置,然后单击其旁边的“播放”按钮以运行服务器。
现在我们有了一个运行 flask run
从PyCharm中,我们可以复制该配置并更改 Script 用于运行其他CLI命令的参数,例如 flask shell
.