2017-07-18 8 views
0

Ich muss die Kontrolle/Leerzeichen aus meinem Cacheschlüssel entfernen. Es wird geben folgende Fehlermeldung:Entfernen von Kontroll-/Leerzeichen aus dem Cacheschlüssel in Python

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

Der Code, ich verwende ist:

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) 

Antwort

0

Das Code-Snippet unten einfach als Mittel angeboten wird, die Eingabezeichenfolge zu korrigieren, aber ich bin sicher, dass es ist eine andere, spezifischere Lösung für Ihr Problem. Mit dieser ungültigen Zeichenfolge benutze ich str.split mit einem : Trennzeichen, um ein Listenobjekt zu erzeugen - und ich möchte nur den Teil nach dem letzten :, also von dem zurückgegebenen Listenobjekt, greife ich das letzte Element, spezifiziere den letzten Index [-1], und jetzt mit der ursprünglichen Zeichenkette (ausschließlich alles vor der letzten :) Ich rufe die Methode .strip auf, um das unerwünschte Newline-Zeichen zu entfernen, resultierend in, was ich glaube, sollte eine gültige Schnur sein, damit Sie verwenden.

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

Dank @TobySpeight, werde ich einige Anpassungen vornehmen .. – flevinkelming

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

PS. Sie müssen s.update('Messages') nicht zweimal berechnen. Sie können sogar s.hexdigest() einlösen.

cache.set(…,returnData) 

ist falsch, weil Sie returnData nicht haben - Sie seine absense geprüft mit if not returnData. Meinst du

cache.set(…,obj) 

?

+0

ja ich meine cache.set (..., obj) @phd – Yasha

Verwandte Themen