在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实现斐波那契递归函数的方法
Sep 08 Python
Python实现的简单发送邮件脚本分享
Nov 07 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
python判断给定的字符串是否是有效日期的方法
May 13 Python
Python lambda函数基本用法实例分析
Mar 16 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
对Python2与Python3中__bool__方法的差异详解
Nov 01 Python
Python 微信爬虫完整实例【单线程与多线程】
Jul 06 Python
使用Django搭建一个基金模拟交易系统教程
Nov 18 Python
django框架两个使用模板实例
Dec 11 Python
Keras 使用 Lambda层详解
Jun 10 Python
Python尾递归优化实现代码及原理详解
Oct 09 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通过header实现文本文件下载的代码
2010/08/08 PHP
PHP查询快递信息的方法
2015/03/07 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
php生成条形码的图片的实例详解
2017/09/13 PHP
javascript中String类的subString()方法和slice()方法
2011/05/24 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
jquery+ajax实现注册实时验证实例详解
2015/12/08 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
js中数组的常用方法小结
2016/12/30 Javascript
使用vue实现点击按钮滑出面板的实现代码
2017/01/10 Javascript
Bootstrap页面缩小变形的快速解决办法
2017/02/03 Javascript
vue下跨域设置的相关介绍
2017/08/26 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
Python调用C语言开发的共享库方法实例
2015/03/18 Python
python从子线程中获得返回值的方法
2019/01/30 Python
导入tensorflow时报错:cannot import name 'abs'的解决
2019/10/10 Python
python numpy--数组的组合和分割实例
2020/02/24 Python
python实现密度聚类(模板代码+sklearn代码)
2020/04/27 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
美国购车网站:TrueCar
2016/10/19 全球购物
宝宝周岁宴答谢词
2014/01/26 职场文书
环保倡议书500字
2014/05/15 职场文书
十佳家长事迹材料
2014/08/26 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
2014机关党员干部“正风肃纪”思想汇报
2014/09/15 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
解读MySQL的客户端和服务端协议
2021/05/10 MySQL
Django migrate报错的解决方案
2021/05/20 Python
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript