Django设置秘密实用程序

djset的Python项目详细描述


djset简化了django设置中的机密管理。

一个常见的django配置模式是使用生产环境中的环境变量和一个本地的未版本设置文件来保存秘密的开发api密钥和其他设置。djset通过使用shell环境、系统keyring和可选的用户提示设置,简化了本地机密设置的管理。

djset是python keyring库之上的一个便利层。

安装

DJSET当前要求python>;=2.6。python 3上的python keyring目前存在一些突出问题:

pip install djset

要安装可选的环境变量helpers(在OSX或Linux中),请在激活后脚本(如果使用VirtualenvWrapper)中或在shell启动文件(如果不使用)中输入source dexportunset.sh

djset完全依赖于环境中设置的django_settings_模块变量。您可以使用virtualenvwrapper postActivate和postDeactivate脚本为项目导出和取消设置此变量。

用法

在settings.py中添加如下内容:

from djset import secret as s

s.prompt = DEBUG
SECRET_KEY = s.get('SECRET_KEY')

密钥按以下顺序解析:

environment
    |
keychain in the NAME.keyring namespace (local)
    |
keychain in the KEY.keyring namespace (global)
    |
prompt for input or raise ImproperlyConfigured

prompt还将add密钥添加到keyring中。

一个常见的做法是为开发设置一些合理的默认值,例如您的密钥。djset提供了对dict.get行为的一种扭曲。

SECRET_KEY = s.get('SECRET_KEY',prompt_default='xyz')或仅SECRET_KEY = s.get('SECRET_KEY', 'xyz')将设置提示用户的默认值,但如果prompt=false,仍将引发一个不正确的配置错误,这对于自动部署更为有用。另外一个可选参数prompt_help可以帮助用户做出决定。如果要分发项目模板供其他人使用,这可能很有用。

默认情况下,命名空间中的name是您的django\u设置模块。使用备用命名空间:

s.name = 'your.settings'

要添加和删除密钥,请使用命令行:

djsecret add <key>=<value> [--global] [--name=<name> | --settings=<settings>]
djsecret remove <key> [--global]  [--name=<name> | --settings=<settings>]

注意:

OSX and Gnome don't have an api for removing keys so on those platforms the value is cleared.

所有命令通过更改设置文件上的修改时间触发django runserver重新加载。

普通设置管理

djset还有一个用于非敏感设置的keyring后端,这些设置将存储在windows上的~/.local/share/或“$userprofile/local settings”处的keyring_public.cfg中。用法相同,但默认情况下不会引发不正确的配置错误:

from djset import config as c

tz_help = """
Local time zone for this installation. Choices can be found here:
http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
"""
TIME_ZONE = c.get('TIME_ZONE', 'UTC', tz_help)

要添加和删除密钥,请使用命令行:

djconfig add <key>=<value> [--global] [--name=<name> | --settings=<settings>]
djconfig remove <key> [--global]  [--name=<name> | --settings=<settings>]

存储设置的替代/补充是将其导出到当前环境。以下命令(仅限OSX和Linux)的行为与shell export和unset相同,但也会触发重新加载:

dexport <key>=<value>
dunset <key>

定制

通过使用自己的keyring实例覆盖djsecret或djconfig keyring属性来设置自己的keyring后端:

from keyring.backends.file import PlaintextKeyring
from djset import DjSecret
DjSecret.keyring = PlaintextKeyring()
s = DjSecret()

开发和支持

需要NOSE2进行测试。存储库和问题位于https://github.com/bretth/djset

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaBeanio如何将抽象类或接口映射为记录或段   java Jboss 4.2.2到Jboss 7.1.1的迁移问题   如果Java运行时高于给定版本,则强制Maven失败   java在部署时持久化实体   java如何使用jdatechooser从mysql数据库中保存和检索空日期   java Google Drive SDK如何获取文件所在的文件夹?   java使用spring mvc mybatis从oracle db获取失败用户登录结果的数量   数组如何在java中拆分数字文件?   创建对象期间出现安卓 Java空指针异常   java 安卓supportv4。jar在Eclipse中未正确导入   java如何在javafx中创建这种类型的按钮   关于Spring集成和原型范围的java之谜   java正则表达式:在2个标记之间提取DNA信息   使用getText()时出现java空指针异常。toString()。修剪();   java如何从spring控制器获取angularjs中的模型属性值