在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创建线程示例
May 06 Python
低版本中Python除法运算小技巧
Apr 05 Python
Python中的ctime()方法使用教程
May 22 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
使用Python中的tkinter模块作图的方法
Feb 07 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
Sep 25 Python
Python中 Global和Nonlocal的用法详解
Jan 20 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
pandas分组聚合详解
Apr 10 Python
Python3 selenium 实现QQ群接龙自动化功能
Apr 17 Python
Python调用ffmpeg开源视频处理库,批量处理视频
Nov 16 Python
python中redis包操作数据库的教程
Apr 19 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
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
Zend的MVC机制使用分析(一)
2013/05/02 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
php利用ffmpeg提取视频中音频与视频画面的方法详解
2017/06/07 PHP
TP3.2框架分页相关实现方法分析
2020/06/03 PHP
PHP使用POP3读取邮箱接收邮件的示例代码
2020/07/08 PHP
JavaScript 存在陷阱 删除某一区域所有节点
2010/05/10 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
JQuery实现绚丽的横向下拉菜单
2013/12/19 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
原生js仿浏览器滚动条效果
2017/03/02 Javascript
javascript 中的继承实例详解
2017/05/05 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
Vue框架之goods组件开发详解
2018/01/25 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
JS正则表达式验证端口范围(0-65535)
2020/01/06 Javascript
使用pyecharts在jupyter notebook上绘图
2020/04/23 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
Selenium+Python 自动化操控登录界面实例(有简单验证码图片校验)
2019/06/28 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
采购助理岗位职责
2014/02/16 职场文书
单位委托书范本
2014/04/04 职场文书
活着观后感
2015/06/03 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
初中思品教学反思
2016/02/20 职场文书
车位出租协议书范本
2016/03/19 职场文书