在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 相关文章推荐
使用PDB简单调试Python程序简明指南
Apr 25 Python
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
python 多个参数不为空校验方法
Feb 14 Python
python中PS 图像调整算法原理之亮度调整
Jun 28 Python
python UDP(udp)协议发送和接收的实例
Jul 22 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
Python tornado上传文件的功能
Mar 26 Python
python实现交并比IOU教程
Apr 16 Python
jupyter使用自动补全和切换默认浏览器的方法
Nov 18 Python
python process模块的使用简介
May 14 Python
Python Django获取URL中的数据详解
Nov 01 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/08 其他游戏
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
php权重计算方法代码分享
2014/01/09 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
PHP CURL使用详解
2019/03/21 PHP
js href的用法
2010/05/13 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
jQuery实现侧浮窗与中浮窗切换效果的方法
2016/09/05 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
JS/jQuery实现超简单的Table表格添加,删除行功能示例
2019/07/31 jQuery
JS操作json对象key、value的常用方法分析
2019/10/29 Javascript
手把手带你入门微信小程序新框架Kbone的使用
2020/02/25 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
Python使用MD5加密字符串示例
2014/08/22 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
Python读取图片属性信息的实现方法
2016/09/11 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
python里使用正则表达式的组嵌套实例详解
2017/10/24 Python
利用Python实现在同一网络中的本地文件共享方法
2018/06/04 Python
Python3多线程版TCP端口扫描器
2019/08/31 Python
基于ccs3的timeline时间线实现方法
2020/04/30 HTML / CSS
css3中仿放大镜效果的几种方式原理解析
2020/12/03 HTML / CSS
HTML5 中新的全局属性(整理)
2013/07/31 HTML / CSS
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
eharmony澳大利亚:网上约会服务
2020/02/29 全球购物
庆六一活动总结
2014/08/29 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
员工年度工作总结2015
2015/05/18 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
服务器间如何实现文件共享
2022/05/20 Servers