Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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()
Ejemplo n.º 6
0
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)
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
class Topic(db.Model):
    __tablename__ = 'topics'
    id = db.Column(db.Integer, primary_key=True)
    uid = db.Column(db.String(36), nullable=False)
    title = db.Column(db.String(81), nullable=False)
    content = db.Column(db.Text, nullable=False)
    publish = db.Column(db.DateTime, default=datetime.utcnow())
    updated = db.Column(db.DateTime)
    vote = db.Column(db.Integer, default=0)

    author_id = db.Column(db.Integer,
                          db.ForeignKey('users.id',
                                        ondelete="CASCADE"))
    author = db.relationship('User',
                             backref=db.backref('topics',
                                                cascade='all,delete-orphan',
                                                lazy='dynamic'))
    board_id = db.Column(db.Integer,
                         db.ForeignKey('boards.id',
                                       ondelete="CASCADE"))
    board = db.relationship(
        'Board',
        backref=db.backref('topics',
                           cascade='all,delete-orphan',
                           lazy='dynamic',
                           order_by='Topic.publish.desc()'))

    is_good = db.Column(db.Boolean, default=False)
    is_top = db.Column(db.Boolean, default=False)
    # is_top = db.Column(db.Integer, default = 0)
    is_markdown = db.Column(db.Boolean, default=False)
    is_draft = db.Column(db.Boolean, default=False)

    __mapper_args__ = {"order_by": publish.desc()}

    def __str__(self):
        return self.title

    def __repr__(self):
        return "<Topic %r>" % self.title

    def pagea(self, page=None):
        per_page = current_app.config['PER_PAGE']
        return self.paginate(page, per_page, True)
Ejemplo n.º 11
0
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
Ejemplo n.º 12
0
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()}
Ejemplo n.º 13
0
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()
Ejemplo n.º 14
0
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
Ejemplo n.º 15
0
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'))
Ejemplo n.º 16
0
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
Ejemplo n.º 17
0
class Board(db.Model):
    __tablename__ = 'boards'
    id = db.Column(db.Integer, primary_key=True)
    rank = db.Column(db.Integer, default=1)
    board = db.Column(db.String(81), nullable=False)
    parent_board = db.Column(db.String(81), nullable=False)
    description = db.Column(db.Text(), nullable=False)

    count_id = db.Column(db.Integer,
                         db.ForeignKey('counts.id', ondelete="CASCADE"))
    count = db.relationship('Count',
                            backref="board",
                            cascade='all,delete-orphan',
                            single_parent=True,
                            uselist=False)

    __mapper_args__ = {"order_by": rank.desc()}

    def __str__(self):
        return self.board

    def __repr__(self):
        return '<Board %r>' % self.board
Ejemplo n.º 18
0
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
Ejemplo n.º 19
0
class Articles(db.Model):
    # query_class = ArticleQuery
    __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)
    content = db.Column(db.Text, nullable=False)
    category = db.Column(db.String, nullable=False)
    copy = db.Column(db.Boolean, nullable=True, default=False)
    # search_vector = db.Column(TSVectorType('title', 'content',
    #                                         weights={'title': 'A', 'content': 'B'}))
    '''多个标签对多篇文章'''
    tags = db.relationship('Tags',
                           secondary=tag_article,
                           backref=db.backref('articles', lazy='dynamic'))

    __mapper_args__ = {"order_by": publish.desc()}

    # def __init__(self, title, author, content, category):
    #     self.author = author
    #     self.title = title
    #     self.content = content
    #     self.category = category

    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()
Ejemplo n.º 20
0
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
Ejemplo n.º 21
0
class Notice(db.Model):
    __tablename__ = 'notices'
    id = db.Column(db.Integer, primary_key=True)
    publish = db.Column(db.DateTime, default=datetime.now())
    category = db.Column(db.String(81), nullable=False)
    content = db.Column(JSON)
    is_read = db.Column(db.Boolean, default=False)

    rece_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    rece_user = db.relationship("User",
                                backref="rece_user",
                                foreign_keys='Notice.rece_id',
                                uselist=False)

    send_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    send_user = db.relationship("User",
                                backref="send_user",
                                foreign_keys='Notice.send_id',
                                uselist=False)

    def __repr__(self):
        return '<Notice %r>' % self.id
Ejemplo n.º 22
0
class Questions(db.Model):
    __tablename__ = 'questions'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(50), nullable=False)
    content = db.Column(db.Text, nullable=False)
    time = db.Column(db.DateTime, nullable=False)
    kind = db.Column(db.String(60), nullable=True)
    tags = db.relationship(
        'Tags',
        secondary=tag_question,
        lazy='dynamic',
        backref="questions",
        cascade='all,delete-orphan',
        single_parent=True,
        #  passive_deletes=True,
        order_by='Tags.time.desc()')
    is_good = db.Column(db.Boolean, nullable=False, default=False)
    is_top = db.Column(db.Boolean, nullable=False, default=False)
    is_markdown = db.Column(db.Boolean, nullable=False, default=False)
    is_group = db.Column(db.Boolean, nullable=False, default=False)
    last_author = db.Column(db.String, nullable=False)
    last_time = db.Column(db.DateTime, nullable=False)

    collectors = db.relationship('User',
                                 secondary='collects',
                                 backref=db.backref('collect_questions',
                                                    cascade='all,delete',
                                                    lazy='dynamic'))

    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'))

    group_id = db.Column(db.Integer,
                         db.ForeignKey('groups.id', ondelete="CASCADE"))
    group = db.relationship('Group',
                            backref=db.backref('questions',
                                               cascade='all,delete-orphan',
                                               lazy='dynamic'))
    board_id = db.Column(db.Integer,
                         db.ForeignKey('board_s.id', ondelete="CASCADE"))
    board = db.relationship('Board_S',
                            backref=db.backref('questions',
                                               cascade='all,delete-orphan',
                                               lazy='dynamic'))

    __mapper_args__ = {"order_by": time.desc()}

    def __init__(self, title, content, kind):
        self.title = title
        self.content = content
        self.kind = kind
        self.time = datetime.now()
        self.last_author = current_user.name
        self.last_time = datetime.now()

    def __repr__(self):
        return "<Questions %r>" % self.title

    @staticmethod
    def load_by_id(mode):
        return Questions.query.filter_by(id=mode).first_or_404()

    @staticmethod
    def load_by_kind(mode):
        return Questions.query.filter_by(kind=mode).all()
Ejemplo n.º 23
0
class User(db.Model, UserMixin):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(49), unique=True)
    email = db.Column(db.String(81), unique=True)
    password = db.Column(db.String, nullable=False)
    is_superuser = db.Column(db.Boolean, default=False)
    is_confirmed = db.Column(db.Boolean, default=False)
    register_time = db.Column(db.DateTime, default=datetime.now())

    following_tags = db.relationship(
        'Tags',
        secondary='follows',
        primaryjoin="User.id==follows.c.follower_id",
        lazy='dynamic',
        backref=db.backref('followers', lazy='dynamic'))
    following_topics = db.relationship(
        'Topic',
        secondary='follows',
        primaryjoin="User.id==follows.c.follower_id",
        lazy='dynamic',
        backref=db.backref('followers', lazy='dynamic'))
    following_collects = db.relationship(
        'Collect',
        secondary='follows',
        primaryjoin="User.id==follows.c.follower_id",
        lazy='dynamic',
        backref=db.backref('followers', lazy='dynamic'))
    following_users = db.relationship(
        'User',
        secondary='follows',
        primaryjoin="User.id==follows.c.follower_id",
        secondaryjoin="User.id==follows.c.following_user_id",
        lazy='dynamic',
        backref=db.backref('followers', lazy='dynamic'),
    )

    setting_id = db.Column(db.Integer,
                           db.ForeignKey('usersetting.id', ondelete="CASCADE"))
    setting = db.relationship("UserSetting",
                              backref="user",
                              cascade='all,delete',
                              uselist=False)

    infor_id = db.Column(db.Integer,
                         db.ForeignKey('userinfor.id', ondelete="CASCADE"))
    infor = db.relationship("UserInfor",
                            backref=db.backref('user', lazy='joined'),
                            cascade='all,delete',
                            uselist=False)

    roles = db.relationship('Role',
                            secondary='user_role',
                            backref=db.backref('users'),
                            lazy='dynamic')

    def __str__(self):
        return self.username

    def __repr__(self):
        return '<User %r>' % self.username

    # @property
    # def password(self):
    #     return "密码不是可读形式!"

    # @password.setter
    # def password(self, password):
    #     self.password_hash = generate_password_hash(password)

    # def verify_password(self, password):
    #     return check_password_hash(password)

    @staticmethod
    def set_password(password):
        pw_hash = generate_password_hash(password)
        return pw_hash

    def check_password(self, password):
        return check_password_hash(self.password, password)