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() 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()) db.create_tables([User, Post, Faccet])