在Django缓存后端使用MD5不允许控制/空格字符

时间:2017-07-15 09:32:00

标签: python django memcached hash-function

我正在使用使用缓存来访问我的网站。这会产生以下错误:

"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,
    }
 }

1 个答案:

答案 0 :(得分:0)

尝试使用m.hexdigest()代替m.digest()。错误消息中的数据是16字节,即二进制散列数据的长度。您似乎需要32个字符的ASCII表示,这是hexdigest提供的。

Docs, for Python 3