2017-07-18 31 views
0

我必須從緩存鍵中刪除控制/空格字符。它給以下錯誤:從python中的緩存鍵刪除控制/空格字符

MemcachedKeyCharacterError: Control/space characters not allowed (key=' :1 :ZjE3MDJiNDY4NjI3OGJlY2ZmYzg4YmFhYmU2ZjRiN2E4MzU1NTMyYw==\n') 

,我正在使用的代碼是:

class CachedAPIView(APIView): 
    def get_object(self,request): 
     s = hashlib.sha1() 
     s.update('Messages') 
     returnData=cache.get(base64.encodestring(s.hexdigest()),None) 
     if not returnData: 
      obj=function(self,request.data) 
      s = hashlib.sha1() 
      s.update('Messages') 
      cache.set(base64.encodestring(s.hexdigest()),returnData) 

回答

0

下面的代碼片段是提供簡單,以校正輸入字符串的一種手段,但是我敢肯定有是解決您的問題的另一個更具體的解決方案。使用這個無效的字符串,我使用str.split和:分隔符來產生一個列表對象 - 我只想要最後一個:之後的部分,所以返回的列表對象,我抓住最後一個項目,指定最後一個索引[-1],現在使用原始字符串(排除最後一個:之前的所有內容),我調用方法.strip刪除不需要的換行符,從而導致我認爲應該使用的有效字符串。

>>> temp = ' :1 :ZjE3MDJiNDY4NjI3OGJlY2ZmYzg4YmFhYmU2ZjRiN2E4MzU1NTMyYw==\n' 
>>> key_string = temp.split(':')[-1].strip() 
# ZjE3MDJiNDY4NjI3OGJlY2ZmYzg4YmFhYmU2ZjRiN2E4MzU1NTMyYw== 
+0

謝謝@TobySpeight,我會做一些調整.. – flevinkelming

0
base64.encodestring(s.hexdigest()).strip() 

PS。你不需要計算s.update('Messages')兩次。你甚至可以現金s.hexdigest()

cache.set(…,returnData) 

是錯誤的,因爲你沒有returnData - 你檢查了它的缺席if not returnData。你的意思是

cache.set(…,obj) 

+0

是的我的意思是cache.set(...,obj)@phd – Yasha