class BaseModel(object): create_time = db.Column( db.DateTime, default=datetime.now) # 记录的创建时间 default参数用于设置字段的默认值, 可以为基本类型/函数引用 update_time = db.Column( db.DateTime, default=datetime.now, onupdate=datetime.now) # 记录的更新时间 当记录发生数据更新时, 字段会修改为onupdate参数的值
class Category(BaseModel, db.Model): """ 新闻分类 BaseModel 继承 -- 实现创建时间和更新时间的补充 db.Model 数据模型 -- 实体和数据库表名建立关系 """ # 数据库表名 -- 和当前类绑定 __tablename__ = "info_category" """ORM建立 属性 = 数据库字段""" id = db.Column(db.Integer, primary_key=True) # 分类编号 name = db.Column(db.String(64), nullable=False) # 分类名 # 当前新闻分类的具体新闻 -- 关系 ( 新闻表, 反向引用--新闻表中的新闻分类, 懒加载 ) news_list = db.relationship('News', backref='category', lazy='dynamic') def to_dict(self): """ 把对象数据转换为字典数据 """ # 封装字典 resp_dict = { "id": self.id, "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S"), "name": self.name, } # 返回字典 return resp_dict
class AdOrder(db.Model, BaseModel): '''粉丝量到一定量然后广告接单''' __tablename__ = 'adorder' id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 主键,自增长 agent_id = db.Column(db.Integer, db.ForeignKey('agent.id')) date_of_order = db.Column(db.DateTime, default=datetime.now) # 接单日 push_time = db.Column(db.DateTime) # 推送广告时间/可以写多个时间 ad_count = db.Column(db.Integer, nullable=False) # 广告数量 screenshots = db.Column(db.String(256)) # 截图 amount = db.Column(db.Integer) # 金额/单价 check_out_date = db.Column(db.DateTime) # 结算日 state = db.Column(db.Boolean, default=0, index=True) # 结算状态: 0表示未结算付款,1表示已结算付款 remark = db.Column(db.String(50)) # 备注 def __repr__(self): return '<AdOrder %r>' % self.id def to_dict(self): '''将对象转换为字典数据''' adorder_dict = { 'adorder_id': self.id, 'agent_id': self.agent_id, 'date_of_order': self.date_of_order, 'push_time': self.push_time, 'ad_count': self.ad_count, 'screenshots': self.screenshots, 'amount': self.amount, 'check_out_date': self.check_out_date, 'state': self.state, 'remark': self.remark, } return adorder_dict
class Carousels(BaseModel, db.Model): """轮播图""" __tablename__ = 'info_carousels' id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(64)) # 轮播图名字 categ = db.Column(db.Integer, nullable=False) # 种类
class BaseModel(object): """模型基类,为每个模型补充创建时间和更新时间""" create_time = db.Column(db.DateTime, default=datetime.now) # 记录创建时间 update_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) # 记录的更新时间
class Facility(BaseModel, db.Model): """设施信息""" __tablename__ = "ih_facility_info" id = db.Column(db.Integer, primary_key=True) # 设施编号 name = db.Column(db.String(32), nullable=False) # 设施名字
class Category(BaseModel, db.Model): """新闻分类""" __tablename__ = "info_category" id = db.Column(db.Integer, primary_key=True) # 分类编号 name = db.Column(db.String(64), nullable=False) # 分类名 news_list = db.relationship('News', backref='category', lazy='dynamic')
class User(BaseModel, db.Model): __tablename__ = "info_user" id = db.Column(db.Integer, primary_key=True) # 用户编号 nick_name = db.Column(db.String(32), unique=True, nullable=False) # 用户昵称 password_hash = db.Column(db.String(128), nullable=False) # 加密的密码 last_login = db.Column(db.DateTime, default=datetime.now) # 最后一次登录时间 is_admin = db.Column(db.Boolean, default=False) @property def password(self): raise AttributeError("当前属性不可读") @password.setter def password(self, value): self.password_hash = generate_password_hash(value) def check_passowrd(self, password): return check_password_hash(self.password_hash, password) def to_dict(self): resp_dict = { "id": self.id, "nick_name": self.nick_name, } return resp_dict def to_admin_dict(self): resp_dict = { "id": self.id, "nick_name": self.nick_name, "register": self.create_time.strftime("%Y-%m-%d %H:%M:%S"), "last_login": self.last_login.strftime("%Y-%m-%d %H:%M:%S"), } return resp_dict
class Category(db.Model): '''商品种类表''' __tablename__ = "category" c_id = db.Column(db.Integer, primary_key=True) # 种类id c_name = db.Column(db.String(50), nullable=False) # 种类名 products = db.relationship('Product', backref='category')
class UserFollow(db.Model): __tablename__ = "info_user_fans" follower_id = db.Column(db.Integer, db.ForeignKey("info_user.id"), primary_key=True) # 粉丝id followed_id = db.Column(db.Integer, db.ForeignKey("info_user.id"), primary_key=True) # 作者id
class UserCollection(db.Model, BaseModel): __tablename__ = "info_user_collection" user_id = db.Column(db.Integer, db.ForeignKey("info_user.id"), primary_key=True) # 用户id news_id = db.Column(db.Integer, db.ForeignKey("info_news.id"), primary_key=True) # 新闻id
class ShippingAddress(BaseModel, db.Model): """收货地址""" __tablename__ = "shipping_address" id = db.Column(db.Integer, primary_key=True) # 收件地址id user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 用户编号 address = db.Column(db.String(100), nullable=False) # 地址 nickname = db.Column(db.String(20), nullable=False) # 收件人姓名 phoneNumber = db.Column(db.String(30), nullable=False) # 收件人手机号
class Brand(db.Model): '''商品品牌表''' __tablename__ = "brand" b_id = db.Column(db.Integer, primary_key=True) # 品牌id b_name = db.Column(db.String(50), nullable=False) # 品牌名 prducts = db.relationship('Product', backref='brand')
class Collection(BaseModel, db.Model): """用户收藏视频的表""" __tablename__ = "collection" id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False) video_id = db.Column(db.Integer, db.ForeignKey("videos.id"), nullable=False)
class Order(BaseModel, db.Model): """订单""" __tablename__ = "ih_order_info" id = db.Column(db.Integer, primary_key=True) # 订单编号 user_id = db.Column(db.Integer, db.ForeignKey("ih_user_profile.id"), nullable=False) # 下订单的用户编号 house_id = db.Column(db.Integer, db.ForeignKey("ih_house_info.id"), nullable=False) # 预订的房间编号 begin_date = db.Column(db.DateTime, nullable=False) # 预订的起始时间 end_date = db.Column(db.DateTime, nullable=False) # 预订的结束时间 days = db.Column(db.Integer, nullable=False) # 预订的总天数 house_price = db.Column(db.Integer, nullable=False) # 房屋的单价 amount = db.Column(db.Integer, nullable=False) # 订单的总金额 status = db.Column( # 订单的状态 db.Enum( "WAIT_ACCEPT", # 待接单, "WAIT_PAYMENT", # 待支付 "PAID", # 已支付 "WAIT_COMMENT", # 待评价 "COMPLETE", # 已完成 "CANCELED", # 已取消 "REJECTED" # 已拒单 ), default="WAIT_ACCEPT", index=True) comment = db.Column(db.Text) # 订单的评论信息或者拒单原因 def to_dict(self): """将订单信息转换为字典数据""" order_dict = { "order_id": self.id, "title": self.house.title, "img_url": constants.QINIU_DOMIN_PREFIX + self.house.index_image_url if self.house.index_image_url else "", "start_date": self.begin_date.strftime("%Y-%m-%d"), "end_date": self.end_date.strftime("%Y-%m-%d"), "ctime": self.create_time.strftime("%Y-%m-%d %H:%M:%S"), "days": self.days, "amount": self.amount, "status": self.status, "comment": self.comment if self.comment else "" } return order_dict
class IndexCategory(BaseModel, db.Model): """新闻分类""" __tablename__ = "info_index" id = db.Column(db.Integer, primary_key=True) # 分类编号 name = db.Column(db.String(64), nullable=False) # 分类名 def to_dict(self): resp_dict = {"id": self.id, "name": self.name} return resp_dict
class HouseImage(BaseModel, db.Model): """房屋图片""" __tablename__ = "ih_house_image" id = db.Column(db.Integer, primary_key=True) house_id = db.Column(db.Integer, db.ForeignKey("ih_house_info.id"), nullable=False) # 房屋编号 url = db.Column(db.String(256), nullable=False) # 图片的路径
class Category(BaseModel, db.Model): __tablename__ = "info_category" id = db.Column(db.Integer, primary_key=True) # 分类编号 name = db.Column(db.String(64), nullable=False) # 分类名 news_list = db.relationship('News', backref='category', lazy='dynamic') def to_dict(self): resp_dict = {"id": self.id, "name": self.name} return resp_dict
class Adminlog(db.Model): '''管理员登录日志''' __tablename__ = "adminlog" id = db.Column(db.Integer, primary_key=True) # 编号 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员 ip = db.Column(db.String(100)) # 登录IP addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间 def __repr__(self): return "<Adminlog %r>" % self.id
class CommentLike(BaseModel, db.Model): __tablename__ = "info_comment_like" comment_id = db.Column("comment_id", db.Integer, db.ForeignKey("info_comment.id"), primary_key=True) # 评论编号 user_id = db.Column("user_id", db.Integer, db.ForeignKey("info_user.id"), primary_key=True) # 用户编号
class Role(db.Model): '''角色''' __tablename__ = "role" id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 名称 auths = db.Column(db.String(600)) # 角色权限列表 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 admins = db.relationship("Admin", backref='role') # 管理员外键关系关联 def __repr__(self): return "<Role %r>" % self.name
class Seller(BaseModel, db.Model): """用户""" __tablename__ = "seller" id = db.Column(db.Integer, primary_key=True) # 卖家编号 mobile = db.Column(db.String(50), nullable=False) # 手机号 seller_name = db.Column(db.String(50), unique=False, nullable=False, default=mobile) # 卖家昵称 email = db.Column(db.String(50), nullable=False, default='') # 邮箱 address = db.Column(db.String(100), nullable=True) # 卖家地址 products = db.relationship('Product', backref='seller')
class ShopCar(db.Model): '''购物车表''' __tablename__ = "shop_car" user_id = db.Column(db.Integer, db.ForeignKey('user.id'), primary_key=True) # 用户id product_id = db.Column(db.Integer, db.ForeignKey('product.id'), primary_key=True) # 商品id nums = db.Column(db.Integer, default=1, nullable=False) # 数据库中的数量 is_remove = db.Column(db.INTEGER, default=0) # 是否移除 user = db.relationship('User', backref='shop_car') products = db.relationship("Product", backref='shop_car')
class CommentLike(BaseModel, db.Model): """评论点赞""" __tablename__ = 'info_comment_like' comment_id = db.Column('comment_id', db.Integer, db.ForeignKey('info_comment.id'), primary_key=True) # 评论编号 user_id = db.Column('user_id', db.Integer, db.ForeignKey('blog_customer.id'), primary_key=True) # 用户编号
class Subject(BaseModel, db.Model): """视频分类""" __tablename__ = "subject" id = db.Column(db.Integer, primary_key=True) # 分类编号 name = db.Column(db.String(64), nullable=False) # 分类名 cid = db.Column(db.Integer, db.ForeignKey("subject.id")) video_list = db.relationship('Videos', backref='subject', lazy='dynamic') def to_dict(self): resp_dict = {"id": self.id, "name": self.name, "cid": self.cid} return resp_dict
class Area(BaseModel, db.Model): """城区""" __tablename__ = "ih_area_info" id = db.Column(db.Integer, primary_key=True) # 区域编号 name = db.Column(db.String(32), nullable=False) # 区域名字 houses = db.relationship("House", backref="area") # 区域的房屋 def to_dict(self): """将对象转换为字典数据""" area_dict = {"aid": self.id, "aname": self.name} return area_dict
class Category(BaseModel, db.Model): """新闻分类""" __tablename__ = "info_category" id = db.Column(db.Integer, primary_key=True) # 分类编号 name = db.Column(db.String(64), nullable=False) # 分类名 news_list = db.relationship('News', backref='category', lazy='dynamic') # 新闻分类标题栏 def to_dict(self): return { 'id':self.id, 'name':self.name }
class OrderForm(BaseModel, db.Model): """订单""" __tablename__ = "order_form" id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=True) # 订单id user_id = db.Column(db.Integer, db.ForeignKey("user.id"), nullable=False, primary_key=True) # 用户id address_id = db.Column(db.INTEGER, db.ForeignKey('shipping_address.id'), nullable=False, primary_key=True) # 地址id status = db.Column(db.INTEGER, nullable=False, default=0) # 定单状态,0代付款,1待发货,2待收货,3已签收,4已取消,-1未支付 payment_method = db.Column(db.INTEGER, nullable=False) # 付款方式,0支付宝,1银联,2ebay,3微信,-1未支付 products = db.relationship('Product', backref='order_form', secondary='order_product', lazy='dynamic') address = db.relationship('ShippingAddress', backref=db.backref('order_form', uselist=False))
class User(BaseModel, db.Model): """用户""" __tablename__ = "info_user" id = db.Column(db.Integer, primary_key=True) # 用户编号 nick_name = db.Column(db.String(32), unique=True, nullable=False) # 用户昵称 password_hash = db.Column(db.String(128), nullable=False) # 加密的密码 mobile = db.Column(db.String(11), unique=True, nullable=False) # 手机号 avatar_url = db.Column(db.String(256)) # 用户头像路径 last_login = db.Column(db.DateTime, default=datetime.now) # 最后一次登录时间 is_admin = db.Column(db.Boolean, default=False) signature = db.Column(db.String(512)) # 用户签名 gender = db.Column( # 订单的状态 db.Enum( "MAN", # 男 "WOMAN" # 女 ), default="MAN") # 当前用户收藏的所有新闻 collection_news = db.relationship("News", secondary=tb_user_collection, lazy="dynamic") # 用户收藏的新闻 # 用户所有的粉丝,添加了反向引用followed,代表用户都关注了哪些人(自关联多对多时,需要设置primaryjoin和secondaryjoin) followers = db.relationship('User', secondary=tb_user_follows, # 关系属性根据哪个外键查, primaryjoin就设置哪个外键, 另一个设置为secondaryjoin primaryjoin=(id == tb_user_follows.c.followed_id), secondaryjoin=(id == tb_user_follows.c.follower_id), backref=db.backref('followed', lazy='dynamic'), lazy='dynamic') # 当前用户所发布的新闻 news_list = db.relationship('News', backref='user', lazy='dynamic') def to_dict(self): resp_dict = { "id": self.id, "nick_name": self.nick_name, "avatar_url": constants.QINIU_DOMIN_PREFIX + self.avatar_url if self.avatar_url else "", "mobile": self.mobile, "gender": self.gender if self.gender else "MAN", "signature": self.signature if self.signature else "", "followers_count": self.followers.count(), "news_count": self.news_list.count() } return resp_dict def to_admin_dict(self): resp_dict = { "id": self.id, "nick_name": self.nick_name, "mobile": self.mobile, "register": self.create_time.strftime("%Y-%m-%d %H:%M:%S"), "last_login": self.last_login.strftime("%Y-%m-%d %H:%M:%S"), } return resp_dict
class Superlink(BaseModel, db.Model): __tablename__ = 'info_superlink' id = db.Column(db.Integer, primary_key=True) link_name = db.Column(db.String(32), unique=True, nullable=False) link_url = db.Column(db.Text(200), nullable=False) def to_dic(self): dic = { 'link_id': self.id, 'link_name': self.link_name, 'link_url': self.link_url } return dic