1

您通常如何在初始化期间从数据库加载和存储全局常量中的内容以进行缓存?全局常量以后不会再改变。您只是在加载期间进行数据库查询并将其放入常量中,还是使用某种延迟加载机制?

我想到的是全局范围内的代码,如下所示:

SPECIAL_USER_GROUP = Group.objects.get(name='very special users')
OTHER_THING_THAT_DOESNT_CHANGE = SomeDbEnum.objects.filter(is_enabled=True)
# several more items like this

我在使用空测试数据库运行测试时遇到了问题。一种选择是将所有需要的数据放在夹具中,但我想避免将每个单独的测试与他们不需要的不相关数据耦合。

以下会被认为是好的风格吗?

@memoize
def get_special_user_group():
    return Group.objects.get(name='very special users')

还是首选通用的可重用机制?

4

2 回答 2

2

Django 有一个可以使用的缓存框架。

http://docs.djangoproject.com/en/dev/topics/cache/

它有一个低级缓存 API,可以满足您的需求。

from django.core.cache import cache
cache.set('my_key', 'hello, world!', 30)
cache.get('my_key')

要使用它,你会做类似的事情

if cache.get("key"):
    return cache.get("key")
else:
    value = some_expensive_operation()
    cache.set("key",value)
    return value

使用这样的东西会给你在未来更多的灵活性。

于 2011-03-08T17:33:33.073 回答
0

一种选择是将所有需要的数据放在夹具中,

好想法。

但我想避免将每个单独的测试与他们不需要的不相关数据结合起来。

然后定义更小的灯具。

如有必要,使用 TestCasesetUp方法创建必要的数据库行。

于 2011-03-08T19:49:45.987 回答