X-Git-Url: http://git.datanom.net/flask-test.git/blobdiff_plain/db4f0ba9d4aec596f179335f1d86b3dd2bb206c6..163c4d87c8cefd45e8c8836daa28c53956be1e1a:/app/models.py diff --git a/app/models.py b/app/models.py index 6013939..81b9555 100644 --- a/app/models.py +++ b/app/models.py @@ -1,5 +1,11 @@ from app import db from hashlib import md5 +import re + +followers = db.Table('followers', + db.Column('follower_id', db.Integer, db.ForeignKey('user.id')), + db.Column('followed_id', db.Integer, db.ForeignKey('user.id')) +) class User(db.Model): id = db.Column(db.Integer, primary_key=True) @@ -8,6 +14,12 @@ class User(db.Model): posts = db.relationship('Post', backref='author', lazy='dynamic') about_me = db.Column(db.String(140)) last_seen = db.Column(db.DateTime) + followed = db.relationship('User', + secondary=followers, + primaryjoin=(followers.c.follower_id == id), + secondaryjoin=(followers.c.followed_id == id), + backref=db.backref('followers', lazy='dynamic'), + lazy='dynamic') @property def is_authenticated(self): @@ -30,6 +42,10 @@ class User(db.Model): def avatar(self, size): return 'http://www.gravatar.com/avatar/%s?d=mm&s=%d' % (md5(self.email.encode('utf-8')).hexdigest(), size) + @staticmethod + def make_valid_nickname(nickname): + return re.sub('[^a-zA-Z0-9_\.]', '', nickname) + @staticmethod def make_unique_nickname(nickname): if User.query.filter_by(nickname=nickname).first() is None: @@ -42,6 +58,25 @@ class User(db.Model): version += 1 return new_nickname + def follow(self, user): + if not self.is_following(user): + self.followed.append(user) + return self + + def unfollow(self, user): + if self.is_following(user): + self.followed.remove(user) + return self + + def is_following(self, user): + return self.followed.filter(followers.c.followed_id == user.id).count() > 0 + + def followed_posts(self): + return Post.query.join(followers, (followers.c.followed_id == Post.user_id)).filter(followers.c.follower_id == self.id).order_by(Post.timestamp.desc()) + + def sorted_posts(self): + return self.posts.order_by(Post.timestamp.desc()) + def __repr__(self): return '' % (self.nickname)