在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中用于去除空格的三个函数的使用小结
Apr 07 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
Python中random模块生成随机数详解
Mar 10 Python
Python中存取文件的4种不同操作
Jul 02 Python
python3.6的venv模块使用详解
Aug 01 Python
Python 脚本获取ES 存储容量的实例
Dec 27 Python
Python使用ctypes调用C/C++的方法
Jan 29 Python
Pytest mark使用实例及原理解析
Feb 22 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
用Python制作mini翻译器的实现示例
Aug 17 Python
python基础之爬虫入门
May 10 Python
教你用python控制安卓手机
May 13 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
基于文本的搜索
2006/10/09 PHP
wamp安装后自定义配置的方法
2014/08/23 PHP
php使用date和strtotime函数输出指定日期的方法
2014/11/14 PHP
php使用文本统计访问量的方法
2016/05/12 PHP
微信公众号OAuth2.0网页授权问题浅析
2017/01/21 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
基于jQuery实现最基本的淡入淡出效果实例
2015/02/02 Javascript
jQuery中的通配符选择器使用总结
2016/05/30 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
Vue axios 将传递的json数据转为form data的例子
2019/10/29 Javascript
js实现类选择器和name属性选择器的示例步骤
2021/02/07 Javascript
Python中最常用的操作列表的几种方法归纳
2015/04/24 Python
利用Hyperic调用Python实现进程守护
2018/01/02 Python
对Python 窗体(tkinter)树状数据(Treeview)详解
2018/10/11 Python
python构建基础的爬虫教学
2018/12/23 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
Python用字典构建多级菜单功能
2019/07/11 Python
Python爬虫爬取有道实现翻译功能
2020/11/27 Python
aec加密 php_php aes加密解密类(兼容php5、php7)
2021/03/14 PHP
维也纳通行证:Vienna PASS
2019/07/18 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
会计岗位职责
2013/11/08 职场文书
毕业生找工作推荐信
2013/11/21 职场文书
个人贷款担保书
2014/04/01 职场文书
环境卫生倡议书
2014/08/29 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
活动主持人开场白
2015/05/28 职场文书
2015年教师节感言
2015/08/03 职场文书
小学语文教师研修日志
2015/11/13 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
HTML+css盒子模型案例(圆,半圆等)“border-radius” 简单易上手
2021/05/10 HTML / CSS