在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 04 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
centos6.8安装python3.7无法import _ssl的解决方法
Sep 17 Python
python读取csv和txt数据转换成向量的实例
Feb 12 Python
对python 自定义协议的方法详解
Feb 13 Python
创建Shapefile文件并写入数据的例子
Nov 26 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
tensorflow+k-means聚类简单实现猫狗图像分类的方法
Apr 28 Python
python之基数排序的实现
Jul 26 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
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
基于php编程规范(详解)
2017/08/17 PHP
javascript实现的鼠标链接提示效果生成器代码
2007/06/28 Javascript
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
判断对象是否Window的实现代码
2012/01/10 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
小结Node.js中非阻塞IO和事件循环
2014/09/18 Javascript
jQuery检查事件是否触发的方法
2015/06/26 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
JavaScript深度复制(deep clone)的实现方法
2016/02/19 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
2016/10/27 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
JS实现含有中文字符串的友好截取功能分析
2017/03/13 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
iview通过Dropdown(下拉菜单)实现的右键菜单
2018/10/26 Javascript
Javascript异步执行不按顺序解决方案
2020/04/30 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python实现 多进程导入CSV数据到 MySQL
2017/02/26 Python
Python实现的矩阵转置与矩阵相乘运算示例
2019/03/26 Python
Django框架模板的使用方法示例
2019/05/25 Python
Python 私有化操作实例分析
2019/11/21 Python
基于python爬取链家二手房信息代码示例
2020/10/21 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
Hotels.com越南:酒店预订
2019/10/29 全球购物
如何掌握自荐信格式呢
2013/11/19 职场文书
应用数学专业求职信
2014/03/14 职场文书
全国爱牙日活动总结
2015/02/05 职场文书
体育教师个人工作总结
2015/02/09 职场文书
自主招生英文自荐信
2015/03/25 职场文书
电话营销开场白
2015/05/29 职场文书
2015年幼师个人工作总结
2015/10/15 职场文书
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang