我在Django中使用memcached,但在某些情况下我需要使用低级缓存api。所以我想创建一个让事情变得简单的功能:
def store_cache(key,query,time):
if cache.get(key):
return cache.get(key)
else:
result = **# execute query that was passed in parameter #**
cache.set(key,result,time)
return result
此函数将被称为:
store_cache("my_key", "MyUser.get.objects.all.filter(x = y)", 500)
我的问题...由于我的查询集是“字符串查询”,如何在函数store_cache中执行它?
答案 0 :(得分:1)
这不是设计该API的最佳方式,因为您要求的是使用eval()
,而您并不真的想要这样,因为eval()
是邪恶的并且编码围绕eval的应用程序并不安全。
更好的方法是:
def myobject_cache(key, query, time):
data = cache.get(key)
if data:
return data
else:
result = list(CustomObjectThatHoldsLotsOfQuerySets.get(query))
cache.set(key, result, time)
return result
class CustomObjectThatHoldsLotsOfQuerySets(object):
def get(key):
if key == "MyObject":
return MyObject.objects.filter(x=y)
#do other stuff here