0

我在 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 中执行它?

4

1 回答 1

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
于 2013-09-25T05:42:40.130 回答