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 ShopCart(db.Model): """购物车""" __tablename__ = "shop_cart" id = db.Column(db.Integer, primary_key=True, autoincrement=True) sdate = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) counts = db.Column(db.Integer) # 添加商品数量,不可大于库存总量 # subTotal = db.Column(db.Float) # 结算总金额 uid = db.Column(db.Integer, db.ForeignKey("user.id", ondelete='cascade')) user = db.relationship("User", backref=db.backref("shopcarts", order_by=sdate.desc())) gid = db.Column(db.Integer, db.ForeignKey('goods.id')) goods = db.relationship("Goods", backref=db.backref("shopcarts"))
class Category(BaseModel, db.Model): """商品类别""" __tablename__ = 'category' id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 商品类别编号 cname = db.Column(db.String(255), nullable=False) # 商品类别名称 def category_json(self): category_json = {} category_json["id"] = self.id category_json["cname"] = self.cname return category_json
class User(BaseModel, db.Model): """用户""" __tablename__ = "user" id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 用户编号 name = db.Column(db.String(32), unique=True, nullable=False) # 用户昵称 _password = db.Column('password', db.String(128), nullable=False) # 加密的密码 mobile = db.Column(db.String(11), unique=True, nullable=False) # 手机号 addr = db.Column(db.String(255), nullable=True) # 用户的收货地址 real_name = db.Column(db.String(32)) # 真实姓名 id_card = db.Column(db.String(18)) # 身份证号 avatar_url = db.Column(db.String(128), default='/static/user/icon/default.jpg') # 用户头像路径 # 加入密码散列 @property def password(self): # raise AttributeError('The current property is not readable') return self._password @password.setter def password(self, value): self._password = generate_password_hash(value) # 生成哈希值密码 def verify_password(self, password): return check_password_hash(self._password, password) # 检验哈希值是否一致
class Comment(db.Model): '''商品评论''' __tablename__ = 'comment' id = db.Column(db.Integer, primary_key=True, autoincrement=True) content = db.Column(db.Text, nullable=False) cdate = db.Column(db.DateTime, default=datetime.now) uid = db.Column(db.Integer, db.ForeignKey("user.id", ondelete='cascade')) user = db.relationship("User", backref=db.backref('commments', order_by=cdate.desc())) # comment_parent = db.relationship("Comment", backref=db.backref("comments"), remote_side=[id]) gid = db.Column(db.Integer, db.ForeignKey('goods.id')) goods = db.relationship("Goods", backref=db.backref('commments', order_by=cdate.desc()))
class Goods(BaseModel, db.Model): """商品""" __tablename__ = "goods" id = db.Column(db.Integer, primary_key=True, autoincrement=True) # 房屋编号 title = db.Column(db.String(128), nullable=False) # 商品名称 price = db.Column(db.Integer, default=0) # 单价 counts = db.Column(db.Integer, default=1) # 商品数目 is_sell = db.Column(db.Integer, default=1) # 0销完 1在售 date = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) # 上架时间 index_image_url = db.Column(db.String(256), default="") # 主图片的路径 # images = db.relationship("GoodsImage") # 商品图片 click_counts = db.Column(db.Integer, default=0) # 被浏览次数 cid = db.Column(db.Integer, db.ForeignKey("category.id", ondelete='cascade')) category = db.relationship("Category", backref=db.backref("goods", order_by=date.desc()))
class Order(db.Model): """订单""" __tablename__ = "order" id = db.Column(db.Integer, primary_key=True, autoincrement=True) total_money = db.Column(db.Float) count = db.Column(db.Integer) # 订单商品数量 gid = db.Column(db.Integer, db.ForeignKey('goods.id')) # 商品外键 goods = db.relationship('Goods', backref=db.backref('orders')) ordertime = db.Column(db.DateTime, default=datetime.now) # 订单创建时间 state = db.Column(db.Integer, default=0) # 0未支付,1送达中 2送达完毕 uid = db.Column(db.Integer, db.ForeignKey("user.id", ondelete='cascade')) user = db.relationship("User", backref=db.backref("orders", order_by=ordertime.desc())) order_last_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now) # 订单支付时间