模拟django设置以从数据库中检索,值被缓存

时间:2013-01-02 18:35:30

标签: python django

我正在尝试模拟django的设置文件。我已经建立了一个模型来托管一些可以由管理员更改的设置。这些概念很好用,但是当值改变时它的表现很奇怪,代码没有获得新的变化。

这是我的core_settings

class CoreSettings(object):
    def __getattr__(self, item):
        try:
            return Configuration.objects.get(key=item).value
        except Configuration.DoesNotExist :
            return getattr(settings, item)

core_settings = CoreSettings()

基本上使用上面的内容如下

SF_PUBLICATION_PAGINATION_PP = int(getattr(core_settings, 'SF_PUBLICATION_PAGINATION_PP'))

SF_PUBLICATION_PAGINATION_PP从配置模型中获取正确的值,但是当我更新字段值时,它没有反映出来。只有当我更改文件导致它重新编译时才会进行更改..

有什么想法吗?


更新

似乎只有在刷新runserver时才会看到更改。

2 个答案:

答案 0 :(得分:2)

是的,您的设置值未被刷新,因为当您的settings.py被加载时会设置其值,例如,当您执行“runserver”时会发生这种情况。在开发环境中。

所以,你可以处理,做这样的事情:

def get_live_setting(key):
try:
    return Configuration.objects.get(key=key).value
except Configuration.DoesNotExist :
    return getattr(settings, key)

# get SF_PUBLICATION_PAGINATION_PP's value
get_live_setting('SF_PUBLICATION_PAGINATION_PP')

有了这个你可以解决你的问题,但正确的方法是使用延迟评估,here一些示例和here一个关于' lazy-python'的有趣帖子。

答案 1 :(得分:1)

使用专为此目的而设计的包装怎么样?

查看:django-livesettings

即使您决定不使用它,您也可以随时了解它是如何完成的!


关于您的具体问题。你如何更新字段值?您确定从数据库而不是从except子句中检索了值吗?