- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
如果 settings.py
中未定义默认设置,那么在应用程序中处理默认设置的 djangonautic 方式是什么?
我目前在应用程序中放置了一个 default_settings
文件,并且我考虑了一些选项。我倾向于第一个选项,但在使用 globals()
我经常看到应用程序在使用该设置的文件顶部执行 FOO = getattr(settings, 'FOO', False)
,但我认为存在可读性/重复性问题如果值/名称很长,则使用此方法。
1:将设置放在函数中并迭代局部变量/设置全局变量
def setup_defaults():
FOO = 'bar'
for key, value in locals().items():
globals()[key] = getattr(settings, key, value)
setup_defaults()
优点:
缺点:
2:每次调用都写getattr(settings, 'MY_SETTING', default_settings.MY_SETTING)
优点:- 很清楚。
缺点:- 重复
3:始终将设置定义为 FOO = getattr(settings, 'FOO', '...setting here...')
优点:- 默认值总是被覆盖
缺点:
4:为get_or_default(setting)
优点:
缺点:
5:创 build 置类
class Settings(object):
FOO = 'bar'
def __init__(self):
# filter out the startswith('__') of
# self.__dict__.items() / compare to django.conf.settings?
my_settings = Settings()
缺点:
我很想听听反馈。
最佳答案
我认为在您的应用程序包中创建 settings.py
是很常见的,您可以在其中定义如下设置:
from django.conf import settings
FOO = getattr(settings, 'FOO', "default_value")
在您的应用中,您可以从应用的 settings
模块中导入它们:
from myapp.settings import *
def print_foo():
print FOO
但我认为每个人都同意 Django 缺乏更好的通用架构!如果您正在寻找更复杂的方法来处理此问题,可以使用一些第三方应用程序,例如 django-appconf ,但您决定是否要为您的应用再引入一个依赖项!
在 settings.py
中,将 settings.*
放在属性之前。
from django.conf import settings
settings.FOO = getattr(settings, 'FOO', "default_value")
关于python - 可插拔应用程序的Django默认设置约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8428556/
我是一名优秀的程序员,十分优秀!