gpt4 book ai didi

python - 可插拔应用程序的Django默认设置约定?

转载 作者:IT老高 更新时间:2023-10-28 22:07:57 25 4
gpt4 key购买 nike

如果 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()

优点:

  • 只需编写一次 var name 即可从 django 设置中提取同名的默认值。

缺点:

  • 不习惯使用 globals(),不知道有什么影响

2:每次调用都写getattr(settings, 'MY_SETTING', default_settings.MY_SETTING)

优点:- 很清楚。

缺点:- 重复


3:始终将设置定义为 FOO = getattr(settings, 'FOO', '...setting here...')

优点:- 默认值总是被覆盖

缺点:

  • 重复(必须定义 var 两次 - 一次以字符串形式,一次以 var 形式)
  • 设置不那么可读,因为它现在是第三个参数

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()

缺点:

  • 不能 from foo.bar.my_settings import FOO(实际上,这是一个糟糕的交易破坏者!)

我很想听听反馈。

最佳答案

我认为在您的应用程序包中创建 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 ,但您决定是否要为您的应用再引入一个依赖项!

2020 年更新

settings.py 中,将 settings.* 放在属性之前。

from django.conf import settings
settings.FOO = getattr(settings, 'FOO', "default_value")

关于python - 可插拔应用程序的Django默认设置约定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8428556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com