class Thread(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(80)) description = db.Column(db.String(255)) created_by = db.Column(db.String(80)) date_created = db.Column(db.DateTime(), default=datetime.utcnow) replies = db.relationship("Reply", backref='thread', lazy='dynamic')
class Flink(db.Model): """友情链接表""" __tablename__ = 'flinks' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(20), nullable=False) url = db.Column(db.String(100), nullable=False)
class Files(db.Model): """ 文件模型类 """ __tablename__ = 'files' uuid = db.Column(db.String(100), unique=True, nullable=False) id = db.Column(db.Integer, primary_key=True, autoincrement=True) filename = db.Column(db.String(50), nullable=False) create_time = db.Column(db.DateTime, default=datetime.now) update_time = db.Column(db.DateTime) view_num = db.Column(db.Integer, default=0) content_length = db.Column(db.Integer) content_type = db.Column(db.String(50)) yun_url = db.Column(db.String(200)) _file_hash = db.Column(db.String(50), nullable=False, unique=True) _locked = db.Column(db.Boolean, default=False, nullable=False) @property def file_hash(self): return self._file_hash @file_hash.setter def file_hash(self, datas): self._file_hash = hash_data(datas) @classmethod def file_is_existed(cls, other_dates): other_dates_hash = hash_data(other_dates) return cls.by_hash(other_dates_hash) @classmethod def by_hash(cls, other_dates_hash): return cls.query.filter_by(_file_hash=other_dates_hash).first() @classmethod def all(cls): return cls.query.all() @classmethod def by_id(cls, files_id): return cls.query.filter_by(id=id).first() @classmethod def by_uuid(cls, uuid): return cls.query.filter_by(uuid=uuid).first() @classmethod def by_name(cls, name): return cls.query.filter_by(filename=name).first() @property def locked(self): return self._locked @locked.setter def locked(self, value): assert isinstance(value, bool) self._locked = value
class Product(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), unique=True) price = db.Column(db.Integer) stock = db.Column(db.Integer) description = db.Column(db.String(500)) image = db.Column(db.String(100)) type = db.Column(db.String(25)) live = db.Column(db.Boolean) orders = db.relationship('Order', backref='product', lazy=True)
class Permission(db.Model): """权限表""" __tablename__ = 'permission_permission' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(50), nullable=False) strcode = db.Column(db.String(50), nullable=False) roles = db.relationship("Role", secondary=PermissionToRole.__table__) menu = db.relationship("Menu", uselist=False) handler = db.relationship("Handler", uselist=False)
class Article(SearchableMixin, db.Model): """文章表""" __tablename__ = 'article_article' # __searchable__ = ['title', 'content'] # __analyzer__ = ChineseAnalyzer() id = db.Column(db.Integer, primary_key=True) uuid = db.Column(db.String(36), unique=True, nullable=False, default=lambda: str(uuid4())) title = db.Column(db.String(50)) describe = db.Column(db.Text) read_num = db.Column(db.Integer, default=0) content = db.Column(db.Text) content_html = db.Column(db.Text) create_time = db.Column(db.DateTime, index=True, default=datetime.now) image_path = db.Column(db.String(100), ) user_id = db.Column(db.Integer, db.ForeignKey('users.id')) # 与分类建立外键关系 category_id = db.Column(db.Integer, db.ForeignKey('article_category.id')) # 建立orm查询关系,文章表与评论表的一对多关系 comments = db.relationship('Comment', backref='article', passive_deletes=True, order_by=-Comment.create_time) # 建立orm查询关系,标签表与文章表的多对多关系 tags = db.relationship('Tag', secondary=ArticleToTag.__table__) ips = db.relationship('Record', secondary=UserLikeArticle.__table__) @staticmethod def on_changed_body(target, value, oldvalue, initiator): allowed_tags = [ 'a', 'abbr', 'acronym', 'b', 'blockquote', 'code', 'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul', 'h1', 'h2', 'h3', 'p', 'img', 'video', 'div', 'iframe', 'p', 'br', 'span', 'hr', 'src', 'class' ] allowed_attrs = { '*': ['class'], 'a': ['href', 'rel'], 'img': ['src', 'alt'] } target.body_html = bleach.linkify( bleach.clean(markdown(value, output_format='html'), tags=allowed_tags, strip=True, attributes=allowed_attrs))
class Tag(db.Model): """标签表""" __tablename__ = 'article_tag' id = db.Column(db.Integer, primary_key=True) uuid = db.Column(db.String(36), unique=True, default=lambda: str(uuid4())) name = db.Column( db.String(50), unique=True, ) create_time = db.Column(db.DateTime, index=True, default=datetime.now) # 建立orm查询关系,标签表与文章表的多对多关系 articles = db.relationship('Article', secondary=ArticleToTag.__table__)
class Category(db.Model): """分类表""" __tablename__ = 'article_category' id = db.Column(db.Integer, primary_key=True) uuid = db.Column(db.String(36), unique=True, default=lambda: str(uuid4())) name = db.Column( db.String(50), unique=True, ) create_time = db.Column(db.DateTime, index=True, default=datetime.now) # 建立orm查询关系,分类表与文章表的一对多关系 articles = db.relationship('Article', backref='category')
class User(db.Model, UserMixin): """The user model database""" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(255)) username = db.Column(db.String(255), unique=True) email = db.Column(db.String(255), unique=True) password = db.Column(db.String(255)) active = db.Column(db.Boolean()) confirmed_at = db.Column(db.DateTime(), default=datetime.utcnow) roles = db.relationship("Role", secondary=roles_users, backref=db.backref('users', lazy='dynamic')) replies = db.relationship("Reply", backref="user", lazy="dynamic")
class User(db.Model): """用户表""" __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True, autoincrement=True) uuid = db.Column(db.String(36), unique=True, nullable=False, default=lambda: str(uuid4())) username = db.Column(db.String(50), nullable=False) email = db.Column(db.String(50)) _password = db.Column('password', db.String(200)) last_login_time = db.Column(db.DateTime) login_num = db.Column(db.Integer, default=0) create_time = db.Column(db.DateTime) avatar_hash = db.Column(db.String(32)) articles = db.relationship('Article', backref='users') comments = db.relationship('Comment', backref='users') roles = db.relationship("Role", secondary=UserToRole.__table__) def _hash_password(self, password): return pbkdf2.crypt(password, iterations=0x2537) @property def password(self): return self._password @password.setter def password(self, password): self._password = self._hash_password(password) def auth_password(self, other_password): if self._password is not None: return self.password == pbkdf2.crypt(other_password, self.password) else: return False def gravatar_hash(self): return hashlib.md5(self.email.lower().encode('utf-8')).hexdigest() def gravatar(self, size=100, default='identicon', rating='g'): url = 'https://secure.gravatar.com/avatar' hash = self.avatar_hash or self.gravatar_hash() return '{url}/{hash}?s={size}&d={default}&r={rating}'.format( url=url, hash=hash, size=size, default=default, rating=rating) @classmethod def by_emial(cls, email): return cls.query.filter_by(email=email).first()
class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80)) username = db.Column(db.String(80), unique=True) password = db.Column(db.String(255)) image = db.Column(db.String(255)) joined_date = db.Column(db.String(255)) tweets = db.relationship("Tweets", backref='user', lazy='dynamic') following = db.relationship('User', secondary=followers, primaryjoin=(followers.c.follower_id == id), secondaryjoin=(followers.c.followee_id == id),backref=db.backref('followers', lazy='dynamic'), lazy='dynamic') my_followers = db.relationship('User', secondary=followers, primaryjoin=(followers.c.followee_id == id), secondaryjoin=(followers.c.follower_id == id), backref=db.backref('followees', lazy='dynamic'), lazy='dynamic')
class Record(db.Model): """记录表""" __tablename__ = 'records' id = db.Column(db.Integer, primary_key=True, autoincrement=True) ip = db.Column(db.String(20), nullable=False, unique=True) ips = db.relationship('Article', secondary=UserLikeArticle.__table__)
class Role(db.Model): """角色表""" __tablename__ = 'permission_role' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(50), nullable=False) #角色表和用户表多对多查询关系 users = db.relationship("User", secondary=UserToRole.__table__) #角色表和权限表多对多查询关系 permissions = db.relationship("Permission", secondary=PermissionToRole.__table__)
class Cars(db.Model): __tablename__ = "cars" car_id = db.Column(db.Integer, primary_key=True) model = db.Column(db.String(length=16), nullable=False) mileage = db.Column(db.Integer) manufacturer = db.Column(db.String(30), nullable=False) vin = db.Column(db.String(20), unique=True, nullable=False) gearbox = db.Column(db.String(10)) price = db.Column(db.Integer, nullable=False) power = db.Column(db.Integer) volume = db.Column(db.Float(4)) dealer_id = db.Column(db.Integer, ForeignKey("dealers.dealer_id"), nullable=False) relationship("Dealers", foreign_keys=[dealer_id]) def __init__(self, model, mileage, manufacturer, vin, gearbox, price, power, volume, dealer_id): self.model = model self.mileage = mileage self.manufacturer = manufacturer self.vin = vin self.gearbox = gearbox self.price = price self.power = power self.volume = volume self.dealer_id = dealer_id def __repr__(self): return f"{self.vin}" def save_to_db(self) -> None: db.session.add(self) db.session.commit() def delete_from_db(self) -> None: db.session.delete(self) db.session.commit()
class Comment(db.Model): """一级评论表""" __tablename__ = 'article_comment' id = db.Column(db.Integer, primary_key=True) uuid = db.Column(db.String(36), unique=True, nullable=False, default=lambda: str(uuid4())) content = db.Column(db.Text) create_time = db.Column(db.DateTime, index=True, default=datetime.now) # 与文章表建立外键关系 article_id = db.Column( db.Integer, db.ForeignKey('article_article.id', ondelete="CASCADE")) # 与用户表建立外键关系 user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
class Menu(db.Model): """ 页面中元素菜单显示对应的权限 """ __tablename__ = 'permission_menu' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(50), nullable=False) p_id = db.Column(db.Integer, db.ForeignKey("permission_permission.id"), unique=True, nullable=False) permission = db.relationship("Permission", uselist=False) @classmethod def by_name(cls, name): return cls.query.filter_by(name=name).first()
class Dealers(db.Model): __tablename__ = "dealers" dealer_id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(length=40), nullable=False) ogrn = db.Column(db.String(18), unique=True, nullable=False) address = db.Column(db.String(50)) segment = db.Column(db.String(10)) telephone = db.Column(db.String(12)) url = db.Column(db.String(32)) loans = db.Column(db.Boolean) loan_broker = db.Column(db.String(40)) used_cars = db.Column(db.Boolean) relationship("Cars") def __init__(self, name, ogrn, address, segment, telephone, url, loans, loan_broker, used_cars): self.name = name self.ogrn = ogrn self.address = address self.segment = segment self.telephone = telephone self.url = url self.loans = loans self.loan_broker = loan_broker self.used_cars = used_cars def __repr__(self): return f"{self.name}" def save_to_db(self) -> None: db.session.add(self) db.session.commit() def delete_from_db(self) -> None: db.session.delete(self) db.session.commit()
class Reply(db.Model): id = db.Column(db.Integer, primary_key=True) thread_id = db.Column(db.Integer, db.ForeignKey('thread.id')) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) message = db.Column(db.String(200)) date_created = db.Column(db.DateTime(), default=datetime.utcnow)
class User(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(3)) first_name = db.Column(db.String(25)) surname = db.Column(db.String(25)) address = db.Column(db.String(255)) city = db.Column(db.String(100)) phone_number = db.Column(db.Integer) state = db.Column(db.String(30)) email = db.Column(db.String(50)) country = db.Column(db.String(20)) payment_type = db.Column(db.String(10)) payment_status = db.Column(db.String(20)) reference_num = db.Column(db.String(15)) items = db.relationship("Order", backref="user", lazy=True) def __init__(self, reference_num=None): self.reference_num = reference_num
class Tweets(db.Model): id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey('user.id')) tweet = db.Column(db.String(140)) live = db.Column(db.Boolean) date_created = db.Column(db.DateTime)
class AdminLogin(db.Model): id = db.Column(db.Integer, primary_key=True) user = db.Column(db.String(5)) password = db.Column(db.String(255))
class Role(db.Model, RoleMixin): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=True) description = db.Column(db.String(250))