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