在flask中使用python-dotenv+flask-cli自定义命令(推荐)


Posted in Python onJanuary 05, 2020

最近在重构 flask 项目的时候发现项目的环境变量异常的混乱,非常不便于管理。而且,更重要的事情是我需要通过自定义命令来运行 devlopment 和 production 两种项目环境。

自定义命令工具——flask-cli

在Flask 1.0+ 中已经支持了flask-cli,在翻阅了flask-cli文档之后,发现文档中提供的自定义命令的方法约束还是有点多,而且介绍的也不是特别详细。后来,通过查看flask-cli的源码发现flask-cli是基于Click开发的。

Click is a Python package for creating beautiful command line interfaces in a composable way with as little code as necessary. It's the “Command Line Interface Creation Kit”. It's highly configurable but comes with sensible defaults out of the box.

Click是一个可以使用简洁代码和组合方法来创建漂亮的命令行命令的Python包。它还是一个高度可配置的,具有合理的默认设置的命令行工具创建工具包。

管理环境变量——python-dotenv

在使用flask-cli的时候,为了不需要每次都在 flask run 之前都引入环境变量。官方文档中提了 python-dotenv ,需要在项目中创建 .env 和 .flaskenv 两个文件。

命令行设置的变量会重载 .env 中的变量, .env 中的变量会重载 .flaskenv 中的变量。 .flaskenv 应当用于公共变量,如 FLASK_APP 而 .env 则应用用于私有变量,并且不提交到储存库。

在使用 python-dotenv 之前还需要通过 pip 去安装依赖包(我这里使用的 pipenv ):

pipenv install python-dotenv

在 .env 文件中一般写一些私有变量或者是涉及到隐私的变量,即使不上传到 git 上也不影响程序运行的这种。

下面以 .flaskenv 中的几个变量为例:

# .flaskenv
FLASK_APP = "app"
FLASK_ENV = "development"
FLASK_RUN_HOST = '0.0.0.0'
FLASK_RUN_PORT = '5000'

读取环境变量

这里介绍如何在项目读取变量的方法:

import os
from dotenv import load_dotenv
# 加载环境变量文件,dotenv_path默认值为.env,override是表示是否可以重载,默认值为False
load_dotenv(dotenv_path='.flaskenv',override=True)
# 读取环境变量 FLASK_ENV,通过os.getenv()方法中引入字段名称来读取
env = os.getenv("FLASK_ENV")
print(env)

自定义命令

这里我的项目的入口文件为 app.py

# app.py
import click
import os
from os.path import dirname,join
from dotenv import load_dotenv
# 加载变量文件
load_dotenv(dotenv_path='.flaskenv')

'''
下面这一段代码是根据在命令行中传入的dev的值来执行不同的命令,从而达到一个命令区分开发环境和生产环境
'''
@click.command()
@click.option('--dev', default=os.getenv("FLASK_ENV"),help='environment variable')
def runserver(dev):
 os.system("FLASK_ENV=%s flask run" % (dev))

if __name__ == '__main__':
 runserver()

运行代码:

# 开发环境
python app.py
或者
python app.py --dev=development
# 生产环境
python app.py --dev=production

目前,第一阶段就做了这么多,其中还有很多不足之处,希望大家帮忙提出点意见,后续我有更多的做法,也会第一时间更新这些内容。

总结

以上所述是小编给大家介绍的在flask中使用python-dotenv+flask-cli自定义命令,希望对大家有所帮助!

Python 相关文章推荐
Python 随机生成中文验证码的实例代码
Mar 20 Python
python中将字典转换成其json字符串
Jul 16 Python
Python将xml和xsl转换为html的方法
Mar 10 Python
深入解析Python编程中JSON模块的使用
Oct 15 Python
django使用图片延时加载引起后台404错误
Apr 18 Python
Python tkinter事件高级用法实例
Jan 31 Python
python小程序实现刷票功能详解
Jul 17 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
Python读取文件夹下的所有文件实例代码
Apr 02 Python
Python实现天气查询软件
Jun 07 Python
Python使用pyecharts控件绘制图表
Jun 05 Python
通过 Python 和 OpenCV 实现目标数量监控
Jan 05 #Python
python中count函数简单用法
Jan 05 #Python
Python猴子补丁知识点总结
Jan 05 #Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 #Python
django ajax发送post请求的两种方法
Jan 05 #Python
关于tensorflow的几种参数初始化方法小结
Jan 04 #Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 #Python
You might like
最小化数据传输――在客户端存储数据
2006/10/09 PHP
PHP基于DOM创建xml文档的方法示例
2017/02/08 PHP
浅谈laravel数据库查询返回的数据形式
2019/10/21 PHP
php中加密解密DES类的简单使用方法示例
2020/03/26 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
关于js获取radio和select的属性并控制的代码
2011/05/12 Javascript
jquery特效 幻灯片效果示例代码
2013/07/16 Javascript
超棒的响应式布局jQuery插件Freetile.js
2014/11/17 Javascript
JSON相关知识汇总
2015/07/03 Javascript
详解JS对象封装的常用方式
2016/12/30 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
跟老齐学Python之复习if语句
2014/10/02 Python
python编写暴力破解FTP密码小工具
2014/11/19 Python
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
python让图片按照exif信息里的创建时间进行排序的方法
2015/03/16 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
利用python提取wav文件的mfcc方法
2019/01/09 Python
python爬虫 urllib模块url编码处理详解
2019/08/20 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
命令行运行Python脚本时传入参数的三种方式详解
2019/10/11 Python
python中的split()函数和os.path.split()函数使用详解
2019/12/21 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
通过一张图教会你CSS3倒影的实现
2017/09/26 HTML / CSS
个人自我鉴定怎么写
2013/10/28 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
班组长岗位职责
2014/03/03 职场文书
责任心演讲稿
2014/05/14 职场文书
十佳少先队员演讲稿
2014/09/12 职场文书
大学生翘课检讨书范文
2014/10/06 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
2015年维修工作总结
2015/04/25 职场文书
JS class语法糖的深入剖析
2022/07/07 Javascript