在具有不同版本的settings.py的Django项目中,我可以在设置上使用dict.update()方法吗?

时间:2018-01-25 23:06:33

标签: python django django-rest-framework

我正在开发一个包含多个设置文件的项目,类似于https://medium.com/@ayarshabeer/django-best-practice-settings-file-for-multiple-environments-6d71c6966ee2。有一个settings目录有多个设置文件:

settings
├── base.py
├── development.py
├── production.py
└── staging.py

base.py包含Django REST框架的默认权限设置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',
    ],
}

在制作中,我想使用默认的JSON渲染器而不是可浏览的API。所以在production.py我有这样的事情:

from .base import *

REST_FRAMEWORK.update({
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer'
    )
})

我发现这比在每个文件中定义REST_FRAMEWORK设置更干。问题是:这会有效吗?您可以update settings.py中导入的设置词典吗?

1 个答案:

答案 0 :(得分:1)

您可以直接更新它,但不要这样做。由于字典是可变的,因此您将更新原始字典,因此您将不再对不同的文件进行不同的设置。首先使用deepcopy

from .base import *
from copy import deepcopy

REST_FRAMEWORK = deepcopy(REST_FRAMEWORK)
REST_FRAMEWORK.update({
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer'
    )
})

我过去曾经因此而被咬过,这就是我知道的原因。 :)