跳转到主要内容

设置并保存Django设置到json格式的文件。

项目描述

django-json-settings2 nlshield

信息:

一个简单的应用程序,用于将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 的许多自己的项目和客户项目所支持的。我们很乐意帮助你在下一个项目中,所以通过给我们发送邮件到 hello@netlandish.com 联系我们。

项目详情


下载文件

下载适用于您平台文件的文件。如果您不确定要选择哪个,请了解有关 安装包 的更多信息。

源分发

django-json-settings2-0.1.tar.gz (7.5 kB 查看散列)

上传时间

由以下机构支持