Skip to content

Commit

Permalink
Chapter 10: Caching of user avatar hashes (10d)
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelgrinberg committed Oct 1, 2015
1 parent 2435489 commit 6208ea7
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 1 deletion.
9 changes: 8 additions & 1 deletion app/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class User(UserMixin, db.Model):
about_me = db.Column(db.Text())
member_since = db.Column(db.DateTime(), default=datetime.utcnow)
last_seen = db.Column(db.DateTime(), default=datetime.utcnow)
avatar_hash = db.Column(db.String(32))

def __init__(self, **kwargs):
super(User, self).__init__(**kwargs)
Expand All @@ -69,6 +70,9 @@ def __init__(self, **kwargs):
self.role = Role.query.filter_by(permissions=0xff).first()
if self.role is None:
self.role = Role.query.filter_by(default=True).first()
if self.email is not None and self.avatar_hash is None:
self.avatar_hash = hashlib.md5(
self.email.encode('utf-8')).hexdigest()

@property
def password(self):
Expand Down Expand Up @@ -131,6 +135,8 @@ def change_email(self, token):
if self.query.filter_by(email=new_email).first() is not None:
return False
self.email = new_email
self.avatar_hash = hashlib.md5(
self.email.encode('utf-8')).hexdigest()
db.session.add(self)
return True

Expand All @@ -150,7 +156,8 @@ def gravatar(self, size=100, default='identicon', rating='g'):
url = 'https://secure.gravatar.com/avatar'
else:
url = 'http://www.gravatar.com/avatar'
hash = hashlib.md5(self.email.encode('utf-8')).hexdigest()
hash = self.avatar_hash or hashlib.md5(
self.email.encode('utf-8')).hexdigest()
return '{url}/{hash}?s={size}&d={default}&r={rating}'.format(
url=url, hash=hash, size=size, default=default, rating=rating)

Expand Down
26 changes: 26 additions & 0 deletions migrations/versions/198b0eebcf9_caching_of_avatar_hashes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""caching of avatar hashes
Revision ID: 198b0eebcf9
Revises: d66f086b258
Create Date: 2014-02-04 09:10:02.245503
"""

# revision identifiers, used by Alembic.
revision = '198b0eebcf9'
down_revision = 'd66f086b258'

from alembic import op
import sqlalchemy as sa


def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.add_column('users', sa.Column('avatar_hash', sa.String(length=32), nullable=True))
### end Alembic commands ###


def downgrade():
### commands auto generated by Alembic - please adjust! ###
op.drop_column('users', 'avatar_hash')
### end Alembic commands ###

0 comments on commit 6208ea7

Please sign in to comment.