在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 相关文章推荐
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
mac下给python3安装requests库和scrapy库的实例
Jun 13 Python
浅谈python写入大量文件的问题
Nov 09 Python
对python xlrd读取datetime类型数据的方法详解
Dec 26 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
Jun 17 Python
python爬取盘搜的有效链接实现代码
Jul 20 Python
Python3 使用pillow库生成随机验证码
Aug 26 Python
django创建简单的页面响应实例教程
Sep 06 Python
详解Python修复遥感影像条带的两种方式
Feb 23 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
php自定义apk安装包实例
2014/10/20 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
Yii中的cookie的发送和读取
2016/07/27 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
TNC vs BOOM BO3 第三场2.13
2021/03/10 DOTA
jQuery Validation插件remote验证方式的Bug解决
2010/07/01 Javascript
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
Jquery中getJSON在asp.net中的使用说明
2011/03/10 Javascript
js获取浏览器的可视区域尺寸的实现代码
2011/11/30 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
jquery果冻抖动效果实现方法
2015/01/15 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
vue.js实现仿原生ios时间选择组件实例代码
2016/12/21 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
vue.js将时间戳转化为日期格式的实现代码
2018/06/05 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
vue3.0中的双向数据绑定方法及优缺点
2019/08/01 Javascript
JS数组方法reduce的用法实例分析
2020/03/03 Javascript
浅谈Python实现贪心算法与活动安排问题
2017/12/19 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
利用python如何处理百万条数据(适用java新手)
2018/06/06 Python
Python matplotlib学习笔记之坐标轴范围
2019/06/28 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
浅谈Python中re.match()和re.search()的使用及区别
2020/04/14 Python
欧舒丹英国官网:购买欧舒丹护手霜等明星产品
2017/01/17 全球购物
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
工作疏忽检讨书
2014/01/25 职场文书
小学生考试获奖感言
2014/01/30 职场文书
承诺书怎么写
2014/03/26 职场文书
取保候审保证书
2014/04/30 职场文书
义和团口号
2014/06/17 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
党的群众路线剖析材料
2014/10/09 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP