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
64
65
66
67
|
from peewee import Model, CharField, TextField, DateTimeField, SqliteDatabase, BlobField
from peewee import IntegerField, ForeignKeyField
from flask_login import UserMixin
from werkzeug.security import check_password_hash, generate_password_hash
from datetime import datetime
from config import dbloc
# from app import db
db = SqliteDatabase(dbloc)
class BaseModel(Model):
class Meta:
database = db
class User(UserMixin, BaseModel):
id = IntegerField(primary_key=True)
username = CharField(max_length=64, index=True, unique=True)
default_faccet = TextField(null=False)
password_hash = CharField(max_length=128)
def set_password(self, password):
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
class Faccet(BaseModel):
user_belongs = ForeignKeyField(User, backref="parts")
name = TextField(unique=True)
picture = BlobField()
bio = TextField()
birth = DateTimeField(default=datetime.now)
class Post(BaseModel):
id = IntegerField(primary_key=True)
authour = ForeignKeyField(Faccet, backref="creator")
parent = IntegerField(default=0)
title = CharField()
content = TextField()
created_at = DateTimeField(default=datetime.now)
def get_replies(post_id):
return Post.select().where(Post.parent == post_id).order_by(Post.created_at.desc())
def get_previous(post_id):
tlist = []
lp = Post.get(Post.id == post_id)
while True:
if lp.parent == 0:
break
if lp.id != post_id:
tlist.append(lp)
lp = Post.get(Post.id == lp.parent)
return tlist
def get_attribed_posts(uid):
return Post.select().where(Post.authour == uid).order_by(Post.created_at.asc())
db.create_tables([User, Post, Faccet])
|