【问题标题】:Control/space characters not allowed using MD5 in Django cache backend在 Django 缓存后端中不允许使用 MD5 控制/空格字符
【发布时间】:2017-07-15 09:31:59
【问题描述】:

我正在使用 using 为我的网站使用缓存。这给出了以下错误:

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

【问题讨论】:

  • 欢迎来到本站!如果您还没有,请查看tourhow to ask page,了解更多关于以吸引高质量答案的方式提出问题的信息。

标签: python django memcached hash-function


【解决方案1】:

尝试使用m.hexdigest() 而不是m.digest()。错误信息中的数据是 16 字节,二进制哈希数据的长度。看来您需要 32 个字符的 ASCII 表示,这是 hexdigest 提供的。

Docs, for Python 3

【讨论】:

  • @Iti 不客气!这里的人们希望您传达的方式是单击最有效地回答您的问题的答案旁边的复选标记,然后单击任何有用的答案旁边的向上箭头。这样做会激励其他人在未来回答您的问题。此外,当您接受答案(复选标记)时,您会获得声誉积分,回答者也是如此。
  • 我已经做到了。由于我没有 15 个声望,因此不会在公共场合计算。
  • @Iti 我忘了 :) 。我相信你可以接受,即使你还不能投票 - stackoverflow.com/help/someone-answers 。感谢您的了解!不是每个新用户都是。
猜你喜欢
  • 1970-01-01
  • 2020-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 2021-09-25
相关资源
最近更新 更多