arangda 浏览46次 2020-02-13

flask运行环境变量设置和管理

Flask内置了一个简单的开发服务器(由依赖包Werkzeug提供),足够在开发和测试阶段使用。

flask run 命令用来启动内置的开发服务器

旧的启动开发服务器的方式是使用app.run()方法,目前已不推荐使用(deprecated)。

1. 自动发现程序实例

一般来说,在执行flask run命令运行程序前,我们需要提供程序实例所在模块的位置。我们在上面可以直接运行程序,是因为Flask会自动探测程序实例,自动探测存在下面这些规则:

  • 从当前目录寻找app.pywsgi.py模块,并从中寻找名为appapplication的程序实例。
  • 从环境变量FLASK_APP对应的模块名/导入路径寻找名为appapplication的程序实例。如果 你的程序主模块是其他名称,比如 hello.py,那么需要设置环境变量FLASK_APP,将包含程序 实例的模块名赋值给这个变量。

    Linux或macOS系统使用export命令:

      $ export FLASK_ APP= hello
    

    在 Windows 系统 中 使用 set 命令:

      > set FLASK_ APP= hello
    

2. 管理环境变量

Flask的自动发现程序实例机制还有第三条规则:如果安装了python-dotenv,那么在使用flask run 或其他命令时会使用它自动从.flaskenv文件和.env文件中加载环境变量。

当安装了python-dotenv时,Flask在加载环境变量的优先级是:手动设置的环境变量>.env中设置 的环境变量>.flaskenv设置的环境变量。

除了FLASK_APP,在后面我们还会用到其他环境变量。环境变量在新创建命令行窗口或重启电脑后 就清除了,每次都要重设变量有些麻烦。而且如果你同时开发多个Flask程序,这个FLASK_APP就 需要在不同的值之间切换。为了避免频繁设置环境变量,我们可以使用python-dotenv管理项目 的环境变量,首先使用Pipenv将它安装到虚拟环境:

$ pipenv install python-dotenv 

我们在项目根目录下分别创建两个文件:.env.flaskenv。.flaskenv用来存储和Flask相关的公开环境变量,比如FLASK_APP;而.env用来存储包含敏感信息的环境变量,比如后面我们 会用来配置Email服务器的账户名与密码。在.flaskenv或.env文件中,环境变量使用键值对的形式定义,每行一个,以#开头的为注释,如下所示:

SOME_VAR=1 
#这是注释 
FOO=" BAR"

.env包含敏感信息,除非是私有项目,否则绝对不能提交到Git仓库中。当你开发一个新项目 时,记得把它的名称添加到.gitignore文件中,这会告诉Git忽略这个文件。

3. 使服务器外部可见

我们在上面启动的Web服务器默认是对外不可见的,可以在run命令后添加--host选项将主机地址设为0.0.0.0使其对外可见:

$ flask run --host=0.0.0.0

改变默认端口Flask提供的Web服务器默认监听5000端口,你可以在启动时传入参数来改变它:

$ flask run --port=8000

执行flask run命令时的host和port选项也可以通过环境变量FLASK_RUN_HOST和FLASK_RUN_PORT 设置。事实上,Flask内置的命令都可以使用这种模式定义默认选项值,即FLASK-< COMMAND>-< OPTION>,你可以使用flask --help命令查看所有可用的命令。

4. 设置运行环境

根据运行环境的不同,Flask程序、扩展以及其他程序会改变相应的行为和设置。为了区分程序 运行环境,Flask提供了一个FLASK_ENV环境变量用来设置环境,默认为production( 生产)。 在开发时,我们可以将其设为development(开发),这会开启所有支持开发的特性。为了方便 管理,我们将把环境变量FLASK_ENV的值写入.flaskenv文件中:

FLASK_ENV=development

在开发环境下,调试模式(Debug Mode)将被开启,这时执行flask run 启动程序会自动激活 Werkzeug 内置的调试器(debugger)和重载器(reloader),它们会为开发带来很大的帮助。

如果你想单独控制调试模式的开关,可以通过FLASK_DEBUG环境变量设置,设为1则开启,设为0 则关闭,不过通常不推荐手动设置这个值。

本文参考《Flask Web开发实践》李辉<著>,仅供学习参考,详细更多内容请购买原书查阅。

0 条评论 最新

还没有评论哦.