class Category(db.Model): __tablename__ = 'categories' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(64), nullable=False) def __repr__(self): return '<Category %r>' % self.name def __str__(self): return self.name
class Tags(db.Model): __tablename__ = 'tags' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) def __repr__(self): return '<Tags %r>' % self.name @staticmethod def load_by_name(name): return Tags.query.filter_by(name=name).first_or_404()
class Tags(db.Model): __tablename__ = 'tags' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) blogs = db.relationship( 'Blog', secondary=tag_blog, lazy='dynamic', backref="tags") def __repr__(self): return '<Tags %r>' % self.name def __str__(self): return self.name
class UserInfor(db.Model): __tablename__ = 'userinfor' id = db.Column(db.Integer, primary_key=True) # confirmed_time = db.Column(db.DateTime, nullable=True) # registered_time = db.Column(db.DateTime, nullable=False) # score = db.Column(db.Integer, nullable=False, default=100) avatar = db.Column(db.String) word = db.Column(db.Text, nullable=True) introduce = db.Column(db.Text, nullable=True) school = db.Column(db.String, nullable=True) def __repr__(self): return "<UserInfor %r>" % self.id
class Notices(db.Model): __tablename__ = 'notices' id = db.Column(db.Integer, primary_key=True) notice = db.Column(db.Text, nullable=False) publish = db.Column(db.DateTime, nullable=False) __mapper_args__ = {"order_by": publish.desc()} # def __init__(self, notice): # self.notice = notice def __repr__(self): return "<Notices %r>" % self.title
class Module(db.Model): ''' 后台管理:admin_manager 问题管理:que_manager 回复管理:rep_manager 个人管理:own_manager ''' __tablename__ = 'modules' id = db.Column(db.Integer, primary_key=True) modulecode = db.Column(db.String(81), unique=True) modulename = db.Column(db.String(81), unique=True) parentcode = db.Column(db.String(81), nullable=True) moduleurl = db.Column(db.String(81), nullable=True)
class Articles(db.Model): __tablename__ = 'articles' id = db.Column(db.Integer, primary_key=True) author = db.Column(db.String, nullable=False) title = db.Column(db.String(50), nullable=False) publish = db.Column(db.DateTime, nullable=False) updated = db.Column(db.DateTime, default=datetime.now()) content = db.Column(db.Text, nullable=False) category = db.Column(db.String, nullable=False) copy = db.Column(db.Boolean, nullable=True, default=False) '''多个标签对多篇文章''' tags = db.relationship( 'Tags', secondary=tag_article, backref=db.backref('articles', lazy='dynamic')) __mapper_args__ = {"order_by": publish.desc()} def __repr__(self): return "<Articles %r>" % self.title @staticmethod def load_by_id(qid): return Articles.query.filter_by(id=qid).first_or_404() @staticmethod def load_by_tag(tag): article = Articles.query.join(Articles.tags).\ filter(Tags.name == tag).all() return article @staticmethod def load_by_category(category): return Articles.query.filter_by(category=category).all()
class Route(db.Model): __tablename__ = 'routes' id = db.Column(db.Integer, primary_key=True) endpoint = db.Column(db.String(256), nullable=False) rule = db.Column(db.String(512), nullable=False) permissions = db.relationship('Permiss', secondary=routes_permissions, backref=db.backref('routes')) def __str__(self): return "<%s : %s>" % (self.endpoint, self.rule) def __repr__(self): return "<Route %r>" % self.endpoint
class Questions(db.Model): __tablename__ = 'questions' id = db.Column(db.Integer, primary_key=True) author = db.Column(db.String(20), nullable=False) title = db.Column(db.String(48), nullable=False) describ = db.Column(db.Text, nullable=False) answer = db.Column(db.Text, nullable=False) private = db.Column(db.Boolean, nullable=False, default=False) private_id = db.Column(db.Integer, nullable=True) publish = db.Column(db.DateTime, nullable=False) __mapper_args__ = {"order_by": publish.desc()} def __repr__(self): return "<Questions %r>" % self.title @staticmethod @cache.cached(timeout=60, key_prefix='questions:id') def load_by_id(qid): return Questions.query.filter_by(id=qid).first_or_404() @staticmethod @cache.cached(timeout=60, key_prefix='questions:id') def load_by_author(name): return Questions.query.filter_by(author=name).all() @staticmethod @cache.cached(timeout=60, key_prefix='questions:id') def load_by_private(): questions = Questions.query.filter_by(author=current_user.username, private=True).all() return questions
class Notice(db.Model): __tablename__ = 'notices' id = db.Column(db.Integer, primary_key=True) notice = db.Column(db.Text, nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False) __mapper_args__ = {"order_by": created_at.desc()} # def __init__(self, notice): # self.notice = notice def __repr__(self): return "<Notice %r>" % self.id
class Comments(db.Model): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) author = db.Column(db.String, nullable=False) publish = db.Column(db.DateTime, nullable=False) content = db.Column(db.Text, nullable=False) articles_id = db.Column(db.Integer, db.ForeignKey('articles.id')) article = db.relationship( 'Articles', backref=db.backref('comments', lazy='dynamic')) def __init__(self, author, content): self.author = author self.content = content def __repr__(self): return "<Comments %r>" % self.content
class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(81), nullable=False, default='unconfirmed') description = db.Column(db.String(255), nullable=True) parents = db.relationship('Role', secondary=roles_parents, primaryjoin=(id == roles_parents.c.role_id), secondaryjoin=(id == roles_parents.c.parent_id), backref=db.backref('children')) def __str__(self): return self.name def __repr__(self): return '<Role %r>' % self.name
class Tags(db.Model): __tablename__ = 'tags' '''帖子节点''' id = db.Column(db.Integer, primary_key=True) author = db.Column(db.String(50), nullable=False) name = db.Column(db.String(50), nullable=False) time = db.Column(db.DateTime, nullable=False) __mapper_args__ = {"order_by": time.desc()} def __init__(self, name, author): self.name = name self.author = author self.time = datetime.now() def __repr__(self): return '<Tags %r>' % self.name
class Question(db.Model): __tablename__ = 'questions' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(48), nullable=False) describ = db.Column(db.Text, nullable=False) answer = db.Column(db.Text, nullable=False) is_private = db.Column(db.Boolean, default=False, nullable=False) created_at = db.Column(db.DateTime, default=datetime.utcnow(), nullable=False) author_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete="CASCADE")) author = db.relationship('User', backref=db.backref('questions', cascade='all,delete-orphan', lazy='dynamic')) __mapper_args__ = {"order_by": created_at.desc()} def __repr__(self): return "<Question %r>" % self.title def __str__(self): return self.title @classmethod def get(cls, queId): return cls.query.filter_by(id=queId).first_or_404() @classmethod def get_question_list(cls, page=1, filter_dict=dict()): if not filter_dict: return cls.query.paginate(page, 18, True) return cls.query.filter_by(**filter_dict).paginate(page, 18, True)
class Permiss(db.Model): __tablename__ = 'permissions' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(512), nullable=False) is_allow = db.Column(db.Boolean, default=True) method = db.Column(db.String(16), nullable=False) roles = db.relationship('Role', secondary=roles_permissions, backref=db.backref('permissions')) def __str__(self): if self.is_allow: return self.name + '允许' + self.method else: return self.name + '禁止' + self.method def __repr__(self): return "<Permiss %r>" % self.id
class Lover(db.Model): __tablename__ = 'loves' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete="CASCADE")) reply_id = db.Column(db.Integer, db.ForeignKey('replies.id', ondelete="CASCADE")) like_time = db.Column(db.DateTime, default=datetime.now(), nullable=False) def __init__(self): self.like_time = datetime.now() @staticmethod def load_by_id(rid, uid): return Lover.query.filter_by(reply_id=rid, user_id=uid).first() @staticmethod def load(rid, uid): return Lover.query.filter_by(reply_id=rid, user_id=uid).first()
class Role(db.Model): ''' super admin member banned unconfirmed guest group_admin board_admin ''' __tablename__ = 'roles' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(81), nullable=False, default='unconfirmed') description = db.Column(db.String(255), nullable=True) rank = db.Column(db.Integer, nullable=False, default=1) users = db.relationship('User', secondary='user_role', backref=db.backref('roles', lazy='dynamic')) __mapper_args__ = {"order_by": rank.desc()}
class Permission(db.Model): ''' admin_manager:admin_post,admin_edit,admin_read,admin_delete que_manager:que_post,que_edit,que_read,que_delete rep_manager:rep_post,rep_edit,rep_read,rep_delete own_manager:update_password,update_infor,own_read ''' __tablename__ = 'permission' id = db.Column(db.Integer, primary_key=True) percode = db.Column(db.String(81), nullable=False) pername = db.Column(db.String(81), nullable=False) description = db.Column(db.String(255), nullable=True) module_id = db.Column(db.Integer, db.ForeignKey('modules.id', ondelete="CASCADE")) module = db.relationship('Module', backref=db.backref('permission', cascade='all,delete-orphan', lazy='dynamic')) roles = db.relationship('Role', secondary='role_permission', backref=db.backref('permission', lazy='dynamic'))
class Tags(db.Model): __tablename__ = 'tags' id = db.Column(db.Integer, primary_key=True) time = db.Column(db.DateTime, default=datetime.utcnow()) tagname = db.Column(db.String(64), nullable=False) summary = db.Column(db.Text) tags = db.relationship('Topic', secondary=tag_topic, lazy='dynamic', backref="tags") parents = db.relationship('Tags', secondary=tags_parents, primaryjoin=(id == tags_parents.c.tag_id), secondaryjoin=(id == tags_parents.c.parent_id), backref=db.backref('children', lazy='joined')) def __str__(self): return self.tagname def __repr__(self): return '<Tags %r>' % self.tagname
class Collector(db.Model): __tablename__ = 'collects' id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete="CASCADE")) question_id = db.Column(db.Integer, db.ForeignKey('questions.id', ondelete="CASCADE")) collect_time = db.Column(db.DateTime, default=datetime.now(), nullable=False) def __init__(self): self.collect_time = datetime.now() @staticmethod def load_by_id(qid, uid): return Collector.query.filter_by(question_id=qid, user_id=uid).first() @staticmethod def load(qid, uid): return Collector.query.filter_by(question_id=qid, user_id=uid).first()
class Reply(db.Model): __tablename__ = 'replies' id = db.Column(db.Integer, primary_key=True) content = db.Column(db.Text, nullable=False) # quote = db.Column(db.Text, nullable=True) publish = db.Column(db.DateTime, default=datetime.now()) updated = db.Column(db.DateTime) topic_id = db.Column(db.Integer, db.ForeignKey('topics.id', ondelete="CASCADE")) topic = db.relationship('Topic', backref=db.backref( 'replies', cascade='all,delete-orphan', lazy='dynamic', order_by='Reply.publish.desc()')) author_id = db.Column(db.Integer, db.ForeignKey('users.id')) author = db.relationship('User', backref=db.backref('replies', lazy='dynamic', order_by='Reply.publish')) likers = db.relationship('User', secondary='likes', backref=db.backref("likes", lazy='dynamic')) __mapper_args__ = {"order_by": publish.desc()}
class Books(db.Model): __tablename__ = 'books' id = db.Column(db.Integer, primary_key=True) tag = db.Column(db.Text) name = db.Column(db.Text) title = db.Column(db.Text) author = db.Column(db.Text) content = db.Column(db.Text) def __init__(self, tag, name, title, author, content): self.name = name self.tag = tag self.title = title self.author = author self.content = content def __repr__(self): return '<Books %r>' % self.name @classmethod def get(cls, bookId): return cls.query.filter_by(id=bookId).first_or_404() @classmethod def get_book_list(cls, page=1, filter_dict=dict()): if not filter_dict: return cls.query.paginate(page, 18, True) return cls.query.filter_by(**filter_dict).paginate(page, 18, True)
class Blog(db.Model): __tablename__ = 'blogs' id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(50), nullable=False) created_at = db.Column( db.DateTime, default=datetime.utcnow(), nullable=False) updated_at = db.Column( db.DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow()) content = db.Column(db.Text, nullable=False) is_copy = db.Column(db.Boolean, nullable=True, default=False) category_id = db.Column( db.Integer, db.ForeignKey( 'categories.id', ondelete="CASCADE")) category = db.relationship( 'Category', backref=db.backref( 'blogs', cascade='all,delete-orphan', lazy='dynamic')) author_id = db.Column( db.Integer, db.ForeignKey( 'users.id', ondelete="CASCADE")) author = db.relationship( 'User', backref=db.backref( 'blogs', cascade='all,delete-orphan', lazy='dynamic')) __mapper_args__ = {"order_by": created_at.desc()} def __repr__(self): return "<Blog %r>" % self.title def __str__(self): return self.title @classmethod def get(cls, blogId): return cls.query.filter_by(id=blogId).first_or_404() @classmethod def get_blog_list(cls, page=1, filter_dict=dict()): per_page = current_app.config['PER_PAGE'] bloglist = cls.query if 'tag' in filter_dict.keys(): tag = filter_dict.pop('tag') bloglist = bloglist.join(cls.tags).filter(Tags.name == tag) if 'category' in filter_dict.keys(): category = filter_dict.pop('category') bloglist = bloglist.filter(cls.category == category) bloglist = bloglist.paginate(page, per_page, True) return bloglist
class Follow(db.Model): __tablename__ = 'follows' id = db.Column(db.Integer, primary_key=True) follower_id = db.Column(db.Integer, db.ForeignKey('users.id')) following_user_id = db.Column(db.Integer, db.ForeignKey('users.id')) following_tag_id = db.Column(db.Integer, db.ForeignKey('tags.id')) following_collect_id = db.Column(db.Integer, db.ForeignKey('collects.id')) followinf_topic_id = db.Column(db.Integer, db.ForeignKey('topics.id'))
class Board_F(db.Model): __tablename__ = 'board_f' id = db.Column(db.Integer, primary_key=True) chname_f = db.Column(db.String, nullable=False) enname_f = db.Column(db.String, nullable=False) rank = db.Column(db.Integer, nullable=False) count_id = db.Column(db.Integer, db.ForeignKey('counts.id', ondelete="CASCADE")) count = db.relationship("Counts", backref="board_f", cascade='all,delete-orphan', single_parent=True, uselist=False) __mapper_args__ = { "order_by": rank } def __init__(self, chname_f, enname_f,rank): self.chname_f = chname_f self.enname_f = enname_f self.rank = rank def __repr__(self): return "<Board_F %r>" % self.id @staticmethod def load_all(): return Board_F.query.all() @staticmethod def load_by_id(bid): return Board_F.query.filter_by(id=bid).first_or_404() @staticmethod def load_by_name(name): return Board_F.query.filter_by(enname_f=name).first_or_404()
class Count(db.Model): __tablename__ = 'counts' id = db.Column(db.Integer, primary_key=True) drafts = db.Column(db.Integer, default=0) collects = db.Column(db.Integer, default=0) inviteds = db.Column(db.Integer, default=0) follows = db.Column(db.Integer, default=0) topics = db.Column(db.Integer, default=0) all_topics = db.Column(db.Integer, default=0) def __repr__(self): return '<Count %r>' % self.id
class Board_S(db.Model): __tablename__ = 'board_s' id = db.Column(db.Integer, primary_key=True) chname_s = db.Column(db.String, nullable=False) enname_s = db.Column(db.String, nullable=False) board_id = db.Column(db.Integer, db.ForeignKey('board_f.id', ondelete="CASCADE")) board_f = db.relationship('Board_F', backref=db.backref('board_s', cascade='all,delete-orphan', lazy='dynamic')) count_id = db.Column(db.Integer, db.ForeignKey('counts.id', ondelete="CASCADE")) count = db.relationship("Counts", backref="board_s", cascade='all,delete-orphan', single_parent=True, uselist=False) __mapper_args__ = { "order_by": enname_s } def __init__(self, chname_s, enname_s): self.chname_s = chname_s self.enname_s = enname_s def __repr__(self): return "<Board_S %r>" % self.id @staticmethod def load_by_name(name): return Board_S.query.filter_by(enname_s=name).first_or_404() @staticmethod def load_by_id(bid): return Board_S.query.filter_by(id=bid).first_or_404()
class Collect(db.Model): __tablename__ = 'collects' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32), nullable=False) description = db.Column(db.String(256)) is_privacy = db.Column(db.Boolean, default=False) author_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete="CASCADE")) author = db.relationship('User', backref=db.backref('collects', cascade='all,delete-orphan', lazy='dynamic')) topics = db.relationship('Topic', secondary='collect_topic', lazy='dynamic', backref="collects") def __str__(self): return self.name def __repr__(self): return "<Collect %r>" % self.name
class Comment(db.Model): __tablename__ = 'comments' id = db.Column(db.Integer, primary_key=True) created_at = db.Column( db.DateTime, default=datetime.utcnow(), nullable=False) content = db.Column(db.Text, nullable=False) blog_id = db.Column( db.Integer, db.ForeignKey( 'blogs.id', ondelete="CASCADE")) blog = db.relationship( 'Blog', backref=db.backref( 'comments', cascade='all,delete-orphan', lazy='dynamic')) author_id = db.Column( db.Integer, db.ForeignKey( 'users.id', ondelete="CASCADE")) author = db.relationship( 'User', backref=db.backref( 'comments', cascade='all,delete-orphan', lazy='dynamic')) # def __init__(self, author, content): # self.author = author # self.content = content def __repr__(self): return "<Comment %r>" % self.content @classmethod def get_comment_list(cls, page=20, filter_dict=None): per_page = current_app.config['PER_PAGE'] if filter_dict is None: return cls.query.paginate(page, per_page, True) commentlist = cls.query.filter_by(**filter_dict).paginate( page, per_page, True) return commentlist
class UserSetting(db.Model): ''' 1:all user 2:logined user 3:only own ''' __tablename__ = 'usersetting' id = db.Column(db.Integer, primary_key=True) online_status = db.Column(db.Integer, nullable=False, default=1) topic_list = db.Column(db.Integer, nullable=False, default=1) rep_list = db.Column(db.Integer, nullable=False, default=1) ntb_list = db.Column(db.Integer, nullable=False, default=3) collect_list = db.Column(db.Integer, nullable=False, default=2) locale = db.Column(db.String(32), default='zh') timezone = db.Column(db.String(32), default='UTC') def __repr__(self): return "<UserSetting %r>" % self.id