在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多线程扫描端口示例
Jan 16 Python
python网络编程示例(客户端与服务端)
Apr 24 Python
提升Python程序运行效率的6个方法
Mar 31 Python
在Python的Flask框架中实现单元测试的教程
Apr 20 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
深入理解Python中range和xrange的区别
Nov 26 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
对python读取CT医学图像的实例详解
Jan 24 Python
Python3连接Mysql8.0遇到的问题及处理步骤
Feb 17 Python
pygame实现飞机大战
Mar 11 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 29 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
Protoss魔法科技
2020/03/14 星际争霸
自己写的兼容低于PHP 5.5版本的array_column()函数
2014/10/24 PHP
php准确获取文件MIME类型的方法
2015/06/17 PHP
PHP入门教程之正则表达式基本用法实例详解(正则匹配,搜索,分割等)
2016/09/11 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
js脚本学习 比较实用的基础
2006/09/07 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
js 本地预览的简单实现方法
2014/02/18 Javascript
JavaScript中的ArrayBuffer详细介绍
2014/12/08 Javascript
node.js中的fs.mkdirSync方法使用说明
2014/12/17 Javascript
Bootstrap每天必学之模态框(Modal)插件
2016/04/26 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
webpack@v4升级踩坑(小结)
2018/10/08 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
Vue 中文本内容超出规定行数后展开收起的处理的实现方法
2019/04/28 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
利用aardio给python编写图形界面
2017/08/21 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
python的等深分箱实例
2019/11/22 Python
numpy 声明空数组详解
2019/12/05 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
2020/08/19 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
接受捐赠答谢词
2014/01/27 职场文书
旅游管理毕业生自荐书
2014/02/02 职场文书
法制工作总结2015
2015/07/23 职场文书
党章党规党纪学习心得体会
2016/01/14 职场文书