- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
Latest commit
63 lines (56 loc) · 2.43 KB
/
Copy pathmodels.py
File metadata and controls
63 lines (56 loc) · 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
fromappimportdb
fromdatetimeimportdatetime
fromwerkzeug.securityimportgenerate_password_hash, check_password_hash
fromflask_loginimportUserMixin
fromappimportlogin
@login.user_loader
defload_user(id):
returnUser.query.get(int(id))
followers=db.Table(
'followers',
db.Column('follower_id', db.Integer, db.ForeignKey('user.id')),
db.Column('followed_id', db.Integer, db.ForeignKey('user.id'))
)
classUser(UserMixin, db.Model):
id=db.Column(db.Integer, primary_key=True)
username=db.Column(db.String(64), index=True, unique=True)
email=db.Column(db.String(120), index=True, unique=True)
password_hash=db.Column(db.String(128))
last_seen=db.Column(db.DateTime, default=datetime.utcnow)
about=db.Column(db.String(200))
post=db.relationship("Post", backref='author', lazy="dynamic")
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')
def__repr__(self):
return"<User {}>".format(self.username)
defset_password(self, password):
self.password_hash=generate_password_hash(password)
defcheck_password(self, password):
returncheck_password_hash(self.password_hash, password)
defavatar(self, size=128):
return"https://api.dicebear.com/6.x/identicon/svg?seed={}&size={}".format(self.username, size)
deffollow(self, user):
ifnotself.is_following(user):
self.followed.append(user)
defunfollow(self, user):
ifself.is_following(user):
self.followed.remove(user)
defis_following(self, user):
returnself.followed.filter(
followers.c.followed_id==user.id).count() >0
deffollowed_posts(self):
followed=Post.query.join(
followers, (followers.c.followed_id==Post.user_id)).filter(
followers.c.follower_id==self.id)
own=Post.query.filter_by(user_id=self.id)
returnfollowed.union(own).order_by(Post.timestamp.desc())
classPost(db.Model):
id=db.Column(db.Integer, primary_key=True)
body=db.Column(db.String(500))
timestamp=db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id=db.Column(db.Integer, db.ForeignKey("user.id"))
def__repr__(self):
return"<Post {}>".format(self.body)