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

标签:python,敏感信息,分离
0
投稿

猜你喜欢

  • 教你如何利用Python批量翻译英文Word文档并保留格式

    2022-10-18 21:27:17
  • docker django无法访问redis容器的解决方法

    2021-10-05 05:48:22
  • 高效率的GetRows()的使用方法

    2008-09-23 18:29:00
  • Python3日期与时间戳转换的几种方法详解

    2021-03-10 03:57:17
  • 用Python的Django框架完成视频处理任务的教程

    2022-05-07 05:38:25
  • opencv 图像加法与图像融合的实现代码

    2021-07-20 14:57:30
  • Python使用20行代码实现微信聊天机器人

    2023-12-04 12:52:06
  • Python学习小技巧之利用字典的默认行为

    2021-10-10 23:48:29
  • 网页优化之加速图片显示(CSS Sprite)

    2007-09-29 21:39:00
  • 使用python 将图片复制到系统剪贴中

    2021-12-03 22:34:11
  • 在ASP中通过oo4o连接Oracle数据库的例子

    2008-10-12 12:55:00
  • Django项目之Elasticsearch搜索引擎的实例

    2022-02-26 17:30:28
  • Python通过2种方法输出带颜色字体

    2023-02-08 20:53:22
  • Python测试线程应用程序过程解析

    2023-09-11 03:04:25
  • 详解用python实现基本的学生管理系统(文件存储版)(python3)

    2021-10-08 18:26:29
  • Oracle In和exists not in和not exists的比较分析

    2009-08-27 10:07:00
  • python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例

    2023-05-17 14:06:23
  • python 负数取模运算实例

    2022-06-17 00:50:49
  • 详解常用查找数据结构及算法(Python实现)

    2023-02-27 02:03:21
  • python交易记录链的实现过程详解

    2022-09-01 19:44:46
  • asp之家 网络编程 m.aspxhome.com