class Passport(BaseModel): """用户模型类""" __tablename__ = "s_user_account" username = db.Column(db.String(20)) password = db.Column(db.String(40)) email = db.Column(db.String(30)) gender = db.Column(db.String(3), default="保密") # 默认为保密,1为男,2为女 phone = db.Column(db.String(20), default=None) # 默认为空 balance = db.Column(db.Integer, default=2000) # 用户余额 integral = db.Column(db.Integer, default=1000) # 积分 @classmethod def add_one_passport(cls, username, password, email): obj = cls( username=username, password=get_hash(password), email=email ) db.session.add(obj) db.session.commit() return obj @classmethod def get_one_passport(cls, username, password=None): """根据用户名查询信息""" query_dict = dict( username=username ) if password: query_dict.update(password=get_hash(password)) obj = cls.query.filter_by(**query_dict).first() return obj
class Goods(BaseModel): __tablename__ = "s_goods" goods_type_id = db.Column(db.SmallInteger) # 商品类型id product_title = db.Column(db.String(50), nullable=False) # 产品名称 product_subhead = db.Column(db.String(200), default="无") # 产品副标题 product_price = db.Column(db.DECIMAL(10, 2), nullable=False) # 产品价格 index_image = db.Column(db.String(60)) # 首页商品图片 product_original = db.Column(db.DECIMAL(10, 2)) # 原价 product_sales = db.Column(db.Integer, default=0) # 产品销量 product_image = db.Column(db.String(60)) # 产品图片 goods_stock = db.Column(db.Integer, default=0) # 商品库存 product_weight = db.Column(db.Integer, default=0) # 产品重量 detail_image = db.Column(db.String(60)) # 详情图片 detail_parameter = db.Column(db.Text) # 产品参数 colt = db.relationship("Collect", backref="col_goods") carts = db.relationship("Cart", backref="goods") order = db.relationship("OrderDetail", backref="order_goods") browsing = db.relationship("Browsing", backref="browsing_goods") @classmethod def get_goods_by_id(cls, goods_id): goods = Goods.query.get(goods_id) return goods @classmethod def get_goods_by_type(cls, goods_type_id, limit=None, sort="default"): """根据商品类型id查询商品信息""" from chengse_project.goods.enum import sort_map goods_list = cls.query.filter_by(goods_type_id=goods_type_id).order_by( sort_map[sort].desc()).all() # goods_list = cls.query.filter_by(goods_type_id=goods_type_id).all() if limit: goods_list = goods_list[:limit] return goods_list @classmethod def goods_paging(cls, goods_type_id, per_page, pindex=1, sort="default"): from chengse_project.goods.enum import sort_map pagination = Goods.query.filter_by( goods_type_id=goods_type_id).order_by( sort_map[sort].desc()).paginate(page=pindex, per_page=per_page, error_out=False) return pagination @classmethod def search_list_paging(cls, search_text, per_page, pindex=1, sort="default"): from chengse_project.goods.enum import sort_map # print(db.session.query(Goods).filter(Goods.product_title.like(f"%{search_text}%")).order_by(sort_map[sort].desc()).all()) pagination = db.session.query(Goods).filter( Goods.product_title.like(f"%{search_text}%")).order_by( sort_map[sort].desc()).paginate(page=pindex, per_page=per_page, error_out=False) # print(pagination) return pagination
class Address(BaseModel): """地址模型类""" __tablename__ = "s_user_address" recipient_name = db.Column(db.String(24)) recipient_addr = db.Column(db.String(256)) recipient_phone = db.Column(db.String(11)) zip_code = db.Column(db.String(6)) # 邮编地址 is_default = db.Column(db.Boolean, default=False) # 是否为默认地址 passport_id = db.Column(db.Integer, db.ForeignKey("s_user_account.id"), nullable=False) @classmethod def add_one_address(cls, passport_id, recipient_name, recipient_addr, recipient_phone, zip_code): """添加应该收货地址""" addr = cls.get_one_address(passport_id=passport_id) obj = cls( passport_id=passport_id, recipient_name=recipient_name, recipient_addr=recipient_addr, recipient_phone=recipient_phone, zip_code=zip_code, is_default=not bool(addr) ) db.session.add(obj) db.session.commit() return obj @classmethod def get_one_address(cls, passport_id): addr = Address.query.filter_by(passport_id=passport_id).first() print(addr) return addr
class Area(db.Model): __tablename__ = "areas" aid = db.Column(db.Integer, primary_key=True) # 邮编 atitle = db.Column(db.String(20)) # 地名 pid = db.Column(db.Integer) @classmethod def get_province(cls): province = cls.query.filter_by(pid=None).all() print(province) return province @classmethod def get_addr_info(cls, province_id=None, city=None): if province_id: res = [] info = db.session.query(Area).filter(Area.pid == province_id).all() for shi in info: res.append([str(shi.aid), str(shi.atitle)]) return res if city: res = [] info = db.session.query(Area).filter(Area.pid == city).all() for shi in info: res.append([str(shi.aid), str(shi.atitle)]) return res
class OrderDetail(BaseModel): __tablename__ = "order_detail" order_id = db.Column(db.String(64), db.ForeignKey('orders.order_id'), nullable=False) goods_id = db.Column(db.Integer, db.ForeignKey("s_goods.id"), nullable=False) passport_id = db.Column(db.Integer, db.ForeignKey('s_user_account.id'), nullable=False) goods_count = db.Column(db.Integer, default=1) goods_price = db.Column(db.DECIMAL(10, 2)) @classmethod def add_order_detail_info(cls, order_id, goods_id, passport_id, goods_count, goods_price): info = cls(order_id=order_id, goods_id=goods_id, passport_id=passport_id, goods_count=goods_count, goods_price=goods_price) db.session.add(info) db.session.commit() @classmethod def get_goods(cls, order_id): info = cls.query.filter_by(order_id=order_id).all() return info
class HeadImage(BaseModel): __tablename__ = "head_image" passport_id = db.Column(db.Integer, db.ForeignKey("s_user_account.id"), nullable=False) user_image = db.Column(db.String(60), default="/static/images/people.png") @classmethod def add_first_image(cls, passport_id): info = cls(passport_id=passport_id, user_image="/static/images/people.png") db.session.add(info) db.session.commit()
class Orders(Base): __tablename__ = "orders" order_id = db.Column(db.String(64), primary_key=True) passport_id = db.Column(db.Integer, db.ForeignKey('s_user_account.id'), nullable=False) addr_id = db.Column(db.Integer, db.ForeignKey("s_user_address.id"), nullable=False) total_count = db.Column(db.Integer, default=1) total_price = db.Column(db.DECIMAL(10, 2)) freight_price = db.Column(db.DECIMAL(10, 2)) # 商品运费 pay_method = db.Column(db.String(10), default="余额支付") order_status = db.Column(db.String(10), default="待发货") express = db.Column(db.String(10), default="中通快递") # 快递方式 leave_message = db.Column(db.String(60)) # 留言 order_details = db.relationship("OrderDetail", backref="orders") @classmethod def add_oreder_info(cls, order_id, passport_id, addr_id, total_count, total_price, freight_price, pay_method, express, leave_message): info = cls(order_id=order_id, passport_id=passport_id, addr_id=addr_id, total_count=total_count, total_price=total_price, freight_price=freight_price, pay_method=pay_method, express=express, leave_message=leave_message) db.session.add(info) db.session.commit() @classmethod def search_orders_all(cls, passport_id): orders = cls.query.filter_by(passport_id=passport_id).all() return orders