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第三方库


热门话题
java Spring Websocket处理程序未向所有客户端发布消息   java动态识别base64编码的文件类型   使用有界类型参数的java“两种方法具有相同的擦除”错误   Java中与互斥体相关的多线程问题   华为设备上的java文本对齐问题   java试图运行ant获取错误   java无法从此SPARQL查询中获得任何结果   java有没有人使用过GUTS(GUICE UTILITIES TOOLS SWING)?   在第三方应用程序中打开和关闭的Java程序监视器文件   java Codename One在iOS上保存照片的权限   swing Java程序,使用两个滑块生成两个数字相加   java如何在不安装插件的情况下将lombok jar添加到intellij idea中?   javascript getElementById在IE浏览器中工作,但在iFrame中不工作