10.4 用户头像

通过显示用户头像, 我们可以进一步改进资料页面的外观。

一. 修改|-app/models

class User(UserMixin, db.Model):

    avatar_hash = db.Column(db.String(32)) #1

   

    def __init__(self, **kwargs):

        super(User, self).__init__(**kwargs)

        #...

        self.avatar_hash = hashlib.md5(self.email.encode('utf-8')).hexdigest()  #1


    def change_email(self, new_email): #2

        self.email = new_email

        self.avatar_hash = hashlib.md5(self.email.encode('utf-8')).hexdigest()

        db.session.add(self)

        return True


    def gravatar(self, size=100, default='identicon', rating='g'):

        if request.is_secure:

            url = 'https://secure.gravatar.com/avatar'

        else:

            url = 'http://www.gravatar.com/avatar'

        hash = self.avatar_hash or hashlib.md5(self.email.encode('utf-8')).hexdigest() #1

   return '{url}/{hash}?s={size}&d={default}&r={rating}'.format(url=url, hash=hash, size=size, default=default, rating=rating)

二. 修改|-app/templates/user.html

<img class="img-rounded profile-thumbnail" src="{{ user.gravatar(size=256) }}">

三. 代码理解

#1

计算email的hash值是一项CPU密集型操作, 如果在某个页面生成大量头像, 计算量会非常大。因此我们在User表中增加一avatar_hash属性, 在构造函数中对用户的avatar_hash进行赋值, 以后调用gravatar生成hash的时候, 先从数据库中查找用户的avatar_hash, 如果没有再计算, 会节省很多计算量。

#2

我们添加修改email的函数change_email, 用户改完email后, 需要修改avatar_hash。

四. 运行效果

我们在导航条添加了头像的缩略图, 原理跟标题二相似。

猜你喜欢

转载自blog.csdn.net/sinat_34927324/article/details/79888023