python优雅实现代码与敏感信息分离的方法
作者:编程学习网 发布时间:2022-05-07 18:21:14
“12-Factor” 是构建SaaS服务的一种方 * ,这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。
其中有一条很重要的原则是关于配置的, 12-Factor 要求代码和配置严格分离。
为什么要这么做?
如果你的代码放在Github等外部网络,哪一天要是代码不小心泄露了,你的各种密码,密钥,等配置全都暴露于公网中,这是一件非常可怕的事。
判断一个应用是否正确的将配置与代码分离开了,一个简单方法是你的代码是否可以立刻开源,而不用担心有任何敏感信息暴露。
将应用的配置存储于环境变量中是一种常规做法,例如在命令行中加入:
export PASSWORD=123456
windows
set PASSWORD=123456
业务代码中,通过环境变量来加载。
import os
env = os.environ.get("PASSWORD")
print(env)
这样做就不会将敏感信息暴露于业务代码中了,同时也可以最大程度让开发人员接触正式环境的敏感信息。
不过,问题来了,将敏感信息设置成环境变量,如果这样的信息非常多,挨个设置也太麻烦了。
你一定希望可以将这些敏感信息单独放在一个文件中,始终与代码分开管理
例如,我们在一个flask项目中,敏感信息我们专门放在一个叫.flaskenv 的文件中
.flaskenv 文件
FLASK_DEBUG=1
FLASK_ENV=local
AAA=1234
可是这些配置如何加载到环境变量中去?
python-dotenv
python-dotenv 就是专门干这事的,他能将配置文件的配置信息自动加入到环境变量。
安装 python-dotenv
pip install python-dotenv
加载配置文件
from dotenv import load_dotenv
# 加载文件
load_dotenv(".flaskenv")
import os
flask_env = os.environ.get("FLASK_ENV")
print(flask_env) # local
加载文件后,就可以通过os.environ从环境变量中读取内容。
flask配置最佳实践
在flask中,python-dotenv 可以无缝接入项目中,只要你的项目中存在 .env 或者 .flaskenv 文件,他就会提示你是否安装 python-dotenv
$ flask run
* Tip: There are .env files present. Do "pip install python-dotenv" to use them.
安装完后python-dotenv后,就会自动加载里面的配置文件到环境变量中。
# config.py
class LocalConfig(BaseConfig):
ENV = "development"
FLASK_DEBUG = 1
# 通过变量环境来加载数据库配置
SQLALCHEMY_DATABASE_URI = os.getenv("SQLALCHEMY_DATABASE_URI")
# app.py
def create_app():
app = Flask(__name__)
app.config.from_object(LocalConfig)
# view.py
def hello():
# 加载环境变量
os.environ.get("AAA")
来源:https://juejin.cn/post/7099283807953977358
猜你喜欢
- MS SQL基本语法及实例操作 一:建表并初始化 ============================ create database
- 首先你要确保你机器上面安装了python,其次,你还要确保你上面安装了Django。接下来,才能进入到搭建第一个Django应用程序很简单的
- 本文实例分析了Python兔子毒药问题。分享给大家供大家参考。具体分析如下:问题大致是这样的:1000瓶无色无味的液体,其中一瓶为毒药,其它
- 我们在使用很多新闻系统的时候,都会发现一个问题,尤其是使用 HtmlEdit 从WORD文档中直接拷贝文章(尤其里面有复杂表格和文字)的时候
- 在处理图像的时候经常是读取图片以后把图片转换为灰度图。作为一个刚入坑的小白,我在这篇博客记录了四种处理的方法。首先导入包:import nu
- 基本使用import unittestclass Testcase(unittest.TestCase): @classmeth
- var long2="1988-0w-07";alert(long2.substring(0,4)+"----
- 我有个MM在网上面安了家,想做一个关于特效的网站。她虽然懂一点网页制作,但是她的机器配置比较低,有时为了反复试验页面上一些特殊效果,而打开D
- 前言每一个孩子都像星空中的一颗星星,散发着自己所特有的光芒照亮着整个夜空。今天就带大家用27行Python代码绘制一幅满天星吧。全局设置在绘
- 将dataframe添加到texttable里面,实现格式化输出。data=[{"name":"Amay&qu
- 本文是对《Python Qt GUI快速编程》的第9章的扩展对话框例子Find and replace用Python3+PyQt5+Qt D
- 影响的范围: IE的所有版本在表单的radio/checkbox控件中,一旦他们的DOM结构被更改过就会出现这个bug。bug描述当象下例中
- 在我们学习的过程中会遇到这么样的问题,就是在我们学习的过程中会发现需要分页处理,这里呢,给大家介绍书上说的分页。@app.route(
- 求解列表中元素的排列和组合问题这个问题之前就遇到过几次没有太留意,最近在做题的时候遇上挺多的排列组合问题的,想来有必要温习一下了
- 一个简易的TCP端口扫描器,使用python3实现。需求:扫描目标网站开放哪些端口号,将所有开放的端口号输出。分析:使用socket连接,如
- 本文实例讲述了Python常用模块之requests模块用法。分享给大家供大家参考,具体如下:一. GET请求1.访问一个页面import
- 前两天研究了一下textarea的直观行的换行规律,挺复杂啊:直观行怎样取不光要看cols大小,还要看网页编码方式。cols="3
- 本文实例分析了javascript定义变量时带var与不带var的区别。分享给大家供大家参考。具体分析如下:直接看实例里说明:<scr
- 1. Python中的异常栈跟踪之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printS
- 本文实例讲述了python写xml文件的操作的方法,分享给大家供大家参考。具体方法如下:要生成的xml文件格式如下:<?xml ver