python优雅实现代码与敏感信息分离的方法

 更新时间:2022年05月19日 15:40:09   作者:编程学习网  
这篇文章主要介绍了python优雅实现代码与敏感信息分离的方法,在flask中,python-dotenv 可以无缝接入项目中,只要你的项目中存在 .env 或者 .flaskenv 文件,他就会提示你是否安装 python-dotenv,需要的朋友可以参考下

“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")

到此这篇关于python优雅实现代码与敏感信息分离的方法的文章就介绍到这了,更多相关python代码与敏感信息分离内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 基于plt.title无法显示中文的快速解决

    基于plt.title无法显示中文的快速解决

    这篇文章主要介绍了基于plt.title无法显示中文的快速解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • python双端队列原理、实现与使用方法分析

    python双端队列原理、实现与使用方法分析

    这篇文章主要介绍了python双端队列原理、实现与使用方法,结合实例形式分析了Python双端队列的概念、原理、定义及使用方法,需要的朋友可以参考下
    2019-11-11
  • Django 实现下载文件功能的示例

    Django 实现下载文件功能的示例

    这篇文章主要介绍了Django 实现下载文件功能的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • python数据结构leetcode338比特位计数算法

    python数据结构leetcode338比特位计数算法

    这篇文章主要介绍了力扣刷题中python数据结构leetcode338比特位计数算法解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python字符串格式化str.format()方法的实现

    Python字符串格式化str.format()方法的实现

    字符串的格式化是一个非常重要的功能,用于创建包含变量值的字符串,本来就来介绍一下Python字符串格式化str.format()方法的实现,感兴趣的可以了解一下
    2023-11-11
  • numpy array找出符合条件的数并赋值的示例代码

    numpy array找出符合条件的数并赋值的示例代码

    本文主要介绍了numpy array找出符合条件的数并赋值的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Python分析学校四六级过关情况

    Python分析学校四六级过关情况

    这篇文章主要为大家详细介绍了利用Python分析学校四六级过关情况,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Python学习笔记之集合的概念和简单使用示例

    Python学习笔记之集合的概念和简单使用示例

    这篇文章主要介绍了Python学习笔记之集合的概念和简单使用,涉及Python集合的定义、查找、添加、删除等相关操作技巧与注意事项,需要的朋友可以参考下
    2019-08-08
  • Python中的深拷贝和浅拷贝详解

    Python中的深拷贝和浅拷贝详解

    这篇文章主要介绍了Python中的深拷贝和浅拷贝详解,本文讲解了变量-对象-引用、可变对象-不可变对象、拷贝等内容,需要的朋友可以参考下
    2015-06-06
  • Django安装配置mysql的方法步骤

    Django安装配置mysql的方法步骤

    这篇文章主要介绍了Django安装配置mysql的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-10-10

最新评论