【flask】环境配置-python-dotenv的使用
【自动发现程序实例】
一般来说,在执行flask run命令运行程序前,我们需要提供程序实例所在模块的位置 。
Flask会自动探测程序实例,自动探测存在下面这些规则:
- 从当前目录寻找app.py和wsgi.py模块,并从中寻找名为app或application的程序实例
- 从环境变量FLASK_APP对应的值寻找名为app或application的程序实例
如果你程序主模块命名为app.py,flask run命令会自动在其中寻找程序实例。如果你的程序主模块名是其他名称,
比如hello.py,那么需要设置环境变量FLASK_APP,将包含程序实例的模块名赋值给这个变量。
在linux 或 macOS系统使用export命令:
export FLASK_APP=hello
【管理环境变量】
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服务器的账户名与密码。
在.env和.flaskenv文件中,环境变量使用键值对的形式定义,每行一个,以#开头的为注释,如下所示:
SOME_VAR=1
#这是注释
FOO="BAR"
【注意!】一定是要在运行flask项目的情况下.env 和.flaskenv中的环境变量才会被Flask加载
【代码示例】
.flaskenv中的配置如下:
TEST_ENV=test python-dotenv
app.py
from flask import Flask
app =Flask(__name__) import os
a=os.getenv('TEST_ENV')
print(a) app.run()
从下面的结果可以看出:
如果不在.flaskenv中配置有关flask的环境变量,运行flask后,
即使.flaskenv中有其它变量如,TEST_ENV,也不能获取到它的值

.flaskenv文件中增加环境变量FLASK_ENV='development'再次运行app.py
这次.flaskenv中的环境变量都被Flask加载到了,与Flask环境无关的变量TEST_ENV的值也能被获取取了
TEST_ENV=test python-dotenv
FLASK_ENV='development'

另:如果不使用python-dotenv来管理配置变量,其实也可以使用.ini这样的配置文件来存储配置信息。
用法:【python3】configparser读取ini配置文件
【flask】环境配置-python-dotenv的使用的更多相关文章
- windows下python+flask环境配置详细图文教程
本帖是本人在安装配置python和flask环境时所用到的资源下载及相关的教程进行了整理罗列,来方便后面的人员,省去搜索的时间.如果你在安装配置是存在问题可留言给我. 首先罗列一下python+fla ...
- 1.python环境配置 - python基础入门
工欲善其事必先利其器,python学习首先要做得就是配置python环境.配置环境只需要下载Pycharm 和 Anaconda两个安装包即可,请跟上我得步伐,一步一步操作. 重要的事情说三遍: 先安 ...
- 环境配置 python 3.6+Anaconda+cuda9.0+cudNN7.0+Tensorflow
最近在摸deepfakes代码,一堆环境要配置,过程记录一下吧. 一.安装Python3.6 Ubuntu16.04系统下默认是python2.7.网上说一般不建议卸载系统自带的python,所以保留 ...
- flask环境配置
1.首先要看装python环境,最好是python 2.7版本的: 2.安装easy_install,至今也不确定这个东西是怎么装的,我先下载了一个ez_setup,用命令“python ez_set ...
- CentOS的开发环境配置(Python、Java、php)
CentOS安装Python 一.Python源代码编译安装 yum -y install wget yum -y install zlib zlib-devel yum -y install bzi ...
- 005 Python开发环境配置
目录 一.概述 二.Python语言概述 2.1 Python语言的诞生 2.2 Monty Python组合 三.Python语言系统开发环境配置 四.Python程序编写与运行 4.1 Pytho ...
- Spark 单机环境配置
概要 Spark 单机环境配置 JDK 环境配置 Spark 环境配置 python 环境配置 Spark 使用示例 示例代码 (order_stat.py) 测试用的 csv 文件内容 (order ...
- Python Flask 多环境配置
Python里取配置文件的时候,之前是使用的ini文件和python里configparser 模块: 可参考:https://www.cnblogs.com/feeland/p/4514771.ht ...
- 在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境 项目运行环境 阿里云(单核CPU, 1G内存, Ubuntu 14.04 x64 带宽1Mbps), 具体购买和ssh连接阿 ...
- 在vscode成功配置Python环境
注意:如果您希望在Visual Studio Code中开始使用Python,请参阅教程.本文仅关注设置Python解释器/环境的各个方面. Python中的“环境”是Python程序运行的上下文.环 ...
随机推荐
- HttpClient 释放连接
Release the Connection:释放连接 This is a crucial step to keep things flowing. We must tell HttpClient t ...
- linux下测试web访问及网络相关的命令
curl命令 curl是linux系统命令行下用来简单测试web访问的工具. curl -xip:port www.baidu.com -x可以指定ip和端口,省略写hosts,方便实用 -I ...
- linux上如何安装mysql
下载rpm包: wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 安装rpm:rpm -ivh mysql-com ...
- linux版宝塔安装Redis
1安装服务 2配置设置 3安装PHP扩展 首先,我们来安装服务,进入管理面板--软件管理--运行环境--redis-点击安装,等待完成 完成之后开始第二步,配置设置.这一步根据自己需要进行配置.注意安 ...
- 用Ant实现Java项目的自动构建和部署(转载以作收藏)
原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml 本文请勿转载! Ant是一个Apache基金会下的跨平台的构件 ...
- Python CGI编程Ⅳ
使用POST方法传递数据 使用POST方法向服务器传递数据是更安全可靠的,像一些敏感信息如用户密码等需要使用POST传输数据. 以下同样是hello_get.py ,它也可以处理浏览器提交的POST表 ...
- JS实现表单全选以及取消全选实例
实现效果: 全选按钮:点击全选按钮所有的小按钮都会被选中:点掉全选按钮,所有按钮取消选中: 小按钮:只有全部被选中,全选按钮才会被选中 思路分析: 1.全选和取消全选做法:让下面所有复选框的 chec ...
- Python初记
------Python是一个优雅的大姐姐 我是通过<老男孩Python>学习Python,根据我手上的资源学习Python,资料不齐,但是这个是最好的,边学习边寻找有没有相同的类型. 在 ...
- Ubuntu:打开JPEG文件错误(Not a JPEG File: starts with 0x52 0x49)
Ubuntu 16.04.4,造冰箱的大熊猫@cnblogs 2018/7/12 近日下载资料时得到一些后缀为jpg的图片文件.这些图片在手机上能够正常预览,但在Ubuntu的文件管理器中无法预览这些 ...
- hdu 1796 How many integers can you find 容斥第一题
How many integers can you find Time Limit: 12000/5000 MS (Java/Others) Memory Limit: 65536/32768 ...