2017-07-15 5 views
2

私は使用するを使用して自分のサイトにキャッシュを使用しています。これは、次のエラーを与えている:DjangoキャッシュバックエンドでMD5を使用して制御/スペース文字を使用できない

"Control/space characters not allowed (key="\xebw\x1b}\xae\xa3\xb8\x18\xc4\xb5\xce\x0c%\x13'\xed")". 

私が使用していたコードを次のようになります。

def hash_key(key, key_prefix, version): 
    new_key = '%s :%s :%s' % (key_prefix, version, key) 
    if len(new_key) > 250: 
     m = hashlib.md5() 
     m.update(new_key) 
     new_key = m.digest() 

    return new_key 
CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 
     'LOCATION': '127.0.0.1.11211', 
     'KEY_FUNCTION': hash_key, 
    } 
} 
+0

このサイトにようこそ! [ツアー](https://stackoverflow.com/tour)と[ページの表示方法](https://stackoverflow.com/help/how-to-ask)をチェックしてください。まだ行っていない場合は、質の高い回答を引き付ける方法で質問しています。 – cxw

答えて

0

m.hexdigest()代わりのm.digest()を使用してみてください。エラー・メッセージのデータは、バイナリー・ハッシュ・データの長さである16バイトです。 hexdigestが提供する32文字のASCII表現が必要です。

Docs, for Python 3

+0

@ Itiようこそ!ここにいる人々は、質問に最も効果的に答えた答えの横にあるチェックマークをクリックし、参考になった答えの横にある上向きの矢印をクリックすることになります。そうすることで、将来あなたの質問に答えるインセンティブが与えられます。さらに、回答者の場合と同様に、回答を受け入れると評判のポイント(チェックマーク)が表示されます。 – cxw

+0

私はそれをしました。私は15の評判を持っていないので、公にカウントされません。 – Yasha

+0

@Iti私は忘れてしまった:)。私はあなたがまだupvote - https://stackoverflow.com/help/someone-answersできない場合でも、あなたが受け入れることができると信じています。知ってくれてありがとう!新しいユーザーがすべてではありません。 – cxw

関連する問題