gpt4 book ai didi

django - Unicode 对象必须在散列之前编码

转载 作者:行者123 更新时间:2023-12-01 11:21:41 24 4
gpt4 key购买 nike

我想在 django 上使用 gravatar:

import hashlib
import urllib
from django import template
from django.utils.safestring import mark_safe

register = template.Library()


# return only the URL of the gravatar
# TEMPLATE USE: {{ email|gravatar_url:150 }}
@register.filter
def gravatar_url(email, size=40):
default = "https://example.com/static/images/defaultavatar.jpg"
return "https://www.gravatar.com/avatar/%s?%s" % (
hashlib.md5(email.lower()).hexdigest(), urllib.urlencode({'d': default, 's': str(size)}))


# return an image tag with the gravatar
# TEMPLATE USE: {{ email|gravatar:150 }}
@register.filter
def gravatar(email, size=40):
url = gravatar_url(email, size)
return mark_safe('<img src="%s" height="%d" width="%d">' % (url, size, size))

我正在使用这个链接: Django gravatar

我把这段代码放在一个名为“grav_tag”的文件中并加载:

{% load  grav_tag %}

我的模板:

{{ user.email|gravatar:150 }}

但是我得到了这个错误

Unicode-objects must be encoded before hashing

最佳答案

user.email 是一个 Unicode 字符串,而哈希函数只能对字节进行操作。因此,您需要根据某些 Unicode 字符编码将字符串转换(即 encode)为一系列字节。

过去,电子邮件地址仅限于 ASCII,但 nowadays they can be UTF-8以及。 gravatar documentation没有提到编码,因此不清楚它们是否支持 UTF-8 电子邮件地址。

简单的答案就是使用 email.lower().encode("utf-8")。由于 ASCII 在整个 ASCII 范围内与 UTF-8 相同,因此这应该适用于 Gravatar 支持的所有电子邮件地址。

关于django - Unicode 对象必须在散列之前编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41790442/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com