2013-09-25 23 views
0

我在Django中使用memcached,但在某些情況下我需要使用低級別的緩存api。所以我有一個想法創造一個功能,使事情變得簡單:由於我的queryset是一個「字符串查詢」,我該如何執行它?

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中執行它?

回答

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 
+0

感謝您的分析:-) – Thomas

相關問題