Django:如何处理数据库中的设置键

时间:2015-08-31 06:46:33

标签: python django

我遇到了一个要求,我需要在数据库中保存一些设置Key,Value。所以我用Key,Value字段创建了一个Model。现在我想访问这些值。我想到的第一件事就是从数据库中获取价值。这是一个例子。

class Settings(models.Model):
    key = models.CharField(max_length=50)
    value = models.CharField(max_length=100)

    @classmethod
    def get_key_value(cls, key):
        obj = cls.objects.filter(key==key)
        if obj.count() > 0:
            return obj.first().value;

        return None

    class Meta:
        db_table = u'app_settings'

我认为每次点击数据库都不是一个好主意。我想在全局变量或会话中保存所有列表。

如何在全球范围内存储数据?

我不知道这是好方法吗?请建议我更好的方法。

2 个答案:

答案 0 :(得分:0)

为什么在可以直接访问settings.py中的数据时需要保存?

from django.conf import settings

print settings.SOME_VALUE

所以没有必要保存我相信

答案 1 :(得分:0)

在这种情况下,您需要拥有一个集中的数据存储,它将充当最可靠的数据库。

您可以在设置文件中设置相应的键值对,只需导入就可以使用设置文件键,值对。

但请记住,在每次重启服务器时,设置文件密钥,值对都将重置为默认值。

但是,您也可以编写一个在每次重启服务器时运行的函数,该函数获取相应的数据库值并填充设置文件值。

    In settings file:
    keys = get_keys()

    key_setter.py:
    def get_keys():

        ### Write function as per your requirements ###

现在您只需导入“密钥”并在视图中使用它们。

在对数据库值进行任何更改时,请确保服务器重新启动。您的数据库必须是唯一真实的来源。您还可以向更新设置文件值的模型添加保存后方法。

我有类似的要求,我必须在设置文件中动态填充allowed_hosts。我通过从数据库中获取某些值的函数调用实现了这一点。这个函数会在每次服务器重启时运行,我还添加了一个post save方法来修改设置文件allowed_hosts变量。