class BannerModel(db.Model): __tablename__ = 'banner' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(255), nullable=False) image_url = db.Column(db.String(255), nullable=False) link_url = db.Column(db.String(255), nullable=False) priority = db.Column(db.Integer, default=0) create_time = db.Column(db.DateTime, default=datetime.now)
class Post(db.Model): __tablename__ = 'post' id = db.Column(db.Integer, primary_key=True, autoincrement=True) title = db.Column(db.String(200), nullable=False) content = db.Column(db.Text, nullable=False) create_time = db.Column(db.DATETIME, default=datetime.now) board_id = db.Column(db.Integer, db.ForeignKey('board.id')) board = db.relationship("Board", backref="posts") author_id = db.Column(db.String(100), db.ForeignKey('front_user.id')) author = db.relationship('FrontUser', backref='posts')
class Role(db.Model): __tablename__ = 'role' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(50), nullable=False) desc = db.Column(db.String(150), nullable=False) create_time = db.Column(db.DATETIME, default=datetime.now) rights = db.Column(db.Integer, default=UserRights.VISITOR) users = db.relationship('Administrator', secondary=adminer_role, backref="roles") def __str__(self): return self.name
class FrontUser(db.Model): __tablename__ = 'front_user' id = db.Column(db.String(100), primary_key=True, default=shortuuid.uuid) #short uuid is efficient and unique telephone = db.Column(db.String(50), nullable=False, unique=True) username = db.Column(db.String(100), nullable=False) _password = db.Column(db.String(100), nullable=False) email = db.Column(db.String(50), unique=True) realname = db.Column(db.String(50)) avatar = db.Column(db.String(100)) signature = db.Column(db.String(100)) gender = db.Column(db.Enum(GenderEnum), default=GenderEnum.SECRET) join_time = db.Column(db.DateTime, default=datetime.now) def __init__(self, *args, **kwargs): if 'password' in kwargs: self.password = kwargs.get('password') kwargs.pop('password') super(FrontUser, self).__init__(*args, **kwargs) @property def password(self): return self._password @password.setter def password(self, new_passwd): self._password = generate_password_hash(new_passwd) def check_password(self, passwd): return check_password_hash(self._password, passwd)
class Administrator(db.Model): __tablename__ = 'administrator' id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(50), nullable=False) _password = db.Column(db.String(100), nullable=False) email = db.Column(db.String(50), nullable=False, unique=True) reg_time = db.Column(db.DATETIME, default=datetime.now) def __init__(self, username, password, email): self.username = username self.password = password # do password.setter self.email = email def __str__(self): return self.username @property def password(self): return self._password @password.setter def password(self, password): self._password = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password, password) @property def rights(self): if not self.roles: return UserRights.NORIGHTS all_rights = 0 for role in self.roles: all_rights |= role.rights return all_rights def has_rights(self, rights): return (self.rights & rights) == rights @property def is_developer(self): return self.has_rights(UserRights.ALLOWED_ALL)
class Comment(db.Model): __tablename__ = 'comment' id = db.Column(db.Integer, primary_key=True, autoincrement=True) content = db.Column(db.Text, nullable=False) create_time = db.Column(db.DATETIME, default=datetime.now) author_id = db.Column(db.String(100), db.ForeignKey('front_user.id')) author = db.relationship('FrontUser', backref='comments') post_id = db.Column(db.Integer, db.ForeignKey('post.id')) post = db.relationship('Post', backref='comments')
class Board(db.Model): __tablename__ = 'board' id = db.Column(db.Integer, primary_key=True, autoincrement=True) board_name = db.Column(db.String(20), nullable=False) #create_user = db.Column(db.String(50),nullable=False) create_time = db.Column(db.DATETIME, default=datetime.now)