设置并保存Django设置到json格式的文件。
项目描述
django-json-settings2 
- 信息:
一个简单的应用程序,用于将Django设置存储在json文件中。
- 版本:
0.1.0
- 作者:
Netlandish团队 (https://www.netlandish.com)
Python / Django支持
Python 3.6+,用于Django版本1.11+
坦白说,这个应用程序可能适用于Python和Django的早期版本,但我们不能保证。
为什么?
我知道,对吧?谁需要另一种方式来存储除标准Django settings.py 设置之外的其他设置。
现有的方式实际上没有一个符合我们满意的典型Django部署设置。这种方法允许我们将设置外部存储,并适合我们的需求。也许它也会适合您的需求。
此外,已经有一个 django-json-settings 应用程序,虽然这个应用程序可能非常适合您的项目,但它并不适合我们的项目。
我们多年前创建了此应用程序,并根据需要慢慢调整。它非常简单,但足够灵活,可以在几乎任何工作流程中工作。
此应用程序实际上只是标准 json 模块操作之上包装的辅助函数。
其他
还有几种其他方法可以将设置存储在典型的Django settings.py 文件之外。以下是一些:
还有几十个选项。选择最适合您需求的选项。
使用方法
保存设置
您需要首先将所需的设置保存到json文件中。这里包含了一个简单的辅助函数和管理命令来帮助您。
例如,假设您想为您的 SECRET_KEY 变量创建一个简单的设置
$ python >>> settings_to_save = ['SECRET_KEY'] >>> from json_settings2 import write_settings_from_django >>> write_settings_from_django(*settings_to_save) >>> exit() $ cat .settings.json { "SECRET_KEY": "SUPER SECRET KEY IS HERE! COOOOOOOLLLLL!" } $
write_settings_from_django 函数接受几个可选变量
settings_vars = 位置参数,提供要保存的所有Django设置
filename = json设置文件的文件名。默认为 .settings.json
directory = 保存 filename 的目录。默认为 .
- indent = json输出的缩进级别。设置为 None 以生成最紧凑的文件。默认为 4
compact file. 默认为 4
- force = 如果 directory/filename 存在,则覆盖它。
默认为 False
您也可以直接使用管理命令。这需要您将 json_settings2 放入您的 INSTALLED_APPS 设置中
$ python manage.py write_json_settings SECRET_KEY
您也可以添加您想要的任意数量的设置
$ python manage.py write_json_settings SECRET_KEY DATABASES STATIC_URL
要查看选项,只需
$ python manage.py help write_json_settings
加载设置
最简单的方法是将所有默认和本地设置存储在 settings.py 中,并在最后加载json设置。这很简单。让我们看一个例子
$ cat settings.py import os from json_settings2 import load_settings DEBUG = True STATIC_URL = '/static/' ... LOTS OF OTHERS SETTINGS HERE ... SETTINGS_DIR = os.path.dirname(os.path.abspath(__file__)) load_settings(globals(), directory=SETTINGS_DIR, depth=3)
实际上,这将告诉函数从与 settings.py 相同的目录开始查找设置文件,如果没有找到,则向上查找目录树3层。
load_settings 函数将在以下路径中搜索 .settings.json
/home/user/app/current/code/
/home/user/app/current/
/home/user/app/
/home/user/
如果需要将设置存储在代码部署目录之外,这非常有用,这通常是情况。
load_settings 函数接受以下变量
- current_settings - 将更新找到的设置的字典。
通常您会传入 globals()。
filename - 设置的json文件的名称。默认为 .settings.json
directory - 存放 filename 的目录的路径。默认为 .
depth - 查找 filename 的父目录数量。默认为 0
store = 将设置存储到 current_settings 字典中。默认为 True
如果 store 设置为 False,则不会修改 current_settings 字典。
函数将始终返回json设置文件中找到的python表示形式。
关于目录的说明 - 默认情况下,上面的 directory 变量设置为 . - 意味着当前目录。这通常意味着您启动Python解释器或从 manage.py 运行的目录。这通常不是您想要的。最好的做法是始终设置期望的目录,以避免调试问题的麻烦。
用作设置的什么?
在调用 load_settings 时,您可以在您的json设置文件中包含一些额外的数据,这些数据对您的代码中的其他目的有用,但不是您想在 django.conf.settings 对象中混淆的数据。
只有以全大写字母存储的密钥才会被存储到 current_settings 字典中。因此,如果你的 JSON 设置中包含不是全大写的选项,它们将仅作为加载的 JSON 数据的一部分返回。
换句话说,假设你 load_settings 以下数据
{ "SeCreT_Key": "This will not be saved in Django settings.", "SECRET_KEY": "This WILL be saved in Django settings.", "secret_key": :This will not be saved in Django settings." }
你的 SECRET_KEY 设置将被设置为 This WILL be saved in Django settings.
在哪里加载设置?
通常,你可以在 settings.py 文件的底部放置它。然而,很多时候你需要那些设置来指导其他设置的值。
没有任何东西阻止你在过程的任何地方加载你的 JSON 设置。这取决于你。只需记住,如果你加载了设置并在加载 JSON 设置之后设置了重复的变量,则重复的变量将具有最终决定权。
例如
$ cat .setting.json { "STATIC_URL": "/my/cool/static/url/" } $ cat settings.py import os from json_settings2 import load_settings SETTINGS_DIR = os.path.dirname(os.path.abspath(__file__)) load_settings(globals(), directory=SETTINGS_DIR, depth=3) DEBUG = True STATIC_URL = '/static/' ... LOTS OF OTHERS SETTINGS HERE ...
当你可能期望它为 /my/cool/static/url/ 时,你的 STATIC_URL 设置的值将被设置为 /static/。只是提醒一下。
版权 & 保修
所有文档、库和示例代码均为 Netlandish Inc. 版权所有 2019 <hello@netlandish.com>。库和示例代码是根据包含的文件 BSD-LICENSE 中的 BSD 许可证的条款向您提供的。
商业支持
这款软件以及许多类似的软件都是为 Netlandish 的许多自己的项目和客户项目所支持的。我们很乐意帮助你在下一个项目中,所以通过给我们发送邮件到 hello@netlandish.com 联系我们。
项目详情
django-json-settings2-0.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 249c47774c515977d65730a926c8ac35f79930f6a8e9ded56501e048088bb770 |
|
MD5 | 4235370622c584c704ac22254f480fc6 |
|
BLAKE2b-256 | 5ffcd62554ce5538d8ee78b6c4c32a8732ba2bc6693294242951daa43329166e |