class Shop(db.Model): id = db.PrimaryKeyField() name = db.CharField(max_length=80) #商品名称 ename = db.CharField(max_length=100) #商品英文名称 price = db.CharField(max_length=30) #商品价格 cid = db.IntegerField() #商品分类 level = db.TinyIntegerField(max_length=1, default=3) #甜度 resume = db.CharField() #简单介绍 intro = db.TextField() #详细介绍 prompt = db.TextField() #提示 args = db.TextField() #参数内容 cover = db.CharField(max_length=20) #头图 views = db.SmallIntegerField(default=0) #点击率 orders = db.SmallIntegerField(default=0) #购买次 status = db.TinyIntegerField(max_length=1, default=0) #是否推荐 0不推荐 1推荐 #9删除 created = db.IntegerField(default=int(time.time())) #添加时间 def validate(self): if self.name and self.ename and self.cid: if not re.match('^[0-9a-z]+$', "".join( self.ename.lower().split())): raise Exception('英文名只能是字母和数字组合') else: raise Exception('请输入商品名,英文名或设置所属分类id') class Meta: db_table = 'shops' order_by = ('-created', )
class CategoryAttr(db.Model): id = db.SmallPrimaryKeyField() cid = db.TinyIntegerField(index=True) #商品分类 name = db.CharField(max_length=50) #商品参数 dec = db.CharField(max_length=255) #默认值 order = db.TinyIntegerField(default=1) #参数排序 def validate(self): if self.cid and self.name: ft = ((CategoryAttr.cid == self.cid) & (CategoryAttr.name == self.name)) if self.id: ft = ft & (CategoryAttr.id != self.id) if CategoryAttr.select().where(ft).count() > 0: raise Exception('此分类属性已存在') else: raise Exception('请输入属性名或设置分类id') @classmethod def maxorder(cls, cid): return CategoryAttr.select().where(CategoryAttr.cid == cid).count() + 1 class Meta: db_table = 'categoryattrs' order_by = ('order', )
class Mark(db.Model): id = db.PrimaryKeyField() uid = db.IntegerField(default=0) #用户Id nickname = db.CharField(max_length=10) #昵称 name = db.CharField(max_length=20) #名称 relation = db.TinyIntegerField(max_length=1, default=0) #关系 0亲人 1朋友 2同事 3客户 gender = db.TinyIntegerField(max_length=1, default=0) #性别 0男 1女 2未知 day = db.DateField(default=datetime.date.today()) #时间 mobile = db.CharField(max_length=11) #联系手机 created = db.IntegerField(max_length=10, default=int(time.time())) #添加时间 class Meta: db_table = 'marks' order_by = ('-id', )
class ShopAttr(db.Model): id = db.PrimaryKeyField() sid = db.IntegerField() #商品Id name = db.CharField(max_length=50) #商品规格 price = db.FloatField() #商品价格 order = db.TinyIntegerField(default=1) #规格排序 def validate(self): if self.sid and self.name: ft = ((ShopAttr.sid == self.sid) & (ShopAttr.name == self.name)) if self.id: ft = ft & (ShopAttr.id != self.id) if ShopAttr.select().where(ft).count() > 0: raise Exception('此规格已存在') else: raise Exception('请输入规格,价格或设置分类id') @classmethod def maxorder(cls, sid): return ShopAttr.select().where(ShopAttr.sid == sid).count() + 1 class Meta: db_table = 'shopattrs' order_by = ('order', )
class Category(db.Model): id = db.TinyPrimaryKeyField() name = db.CharField(max_length=20) #分类名 slug = db.CharField(max_length=20) #访问url order = db.TinyIntegerField(default=1) #排序 def validate(self): if self.name and self.slug: self.slug = self.slug.lower() if not re.match('^[0-9a-z]+$', self.slug): raise Exception('访问目录只能是字母和数字组合') ft = ((Category.name == self.name) | (Category.slug == self.slug)) if self.id: ft = ft & (Category.id != self.id) if Category.select().where(ft).count() > 0: raise Exception('分类同名或者目录同名') else: raise Exception('请输入分类名或者访问目录') @classmethod def maxorder(cls): return Category.select().count() + 1 class Meta: db_table = 'categorys' order_by = ('order', )
class Distribution(db.Model): """ 配送方式 """ id = db.TinyPrimaryKeyField() pdid = db.TinyIntegerField() # 是否为第一级 name = db.CharField(max_length=20) # 配送方式名称 price = db.FloatField(default=0.0) # 配送价格 content = db.CharField() # 如果为第二级则有内容选择 def validate(self): if self.name: ft = (Distribution.name == self.name) if self.id: ft = ft & (Distribution.id != self.id) if Distribution.select().where(ft).count() > 0: raise Exception('此配送方式已存在') else: raise Exception('请输入配送方式') class Meta: db_table = 'distribution' order_by = ('pdid',)
class OrderItem(db.Model): oid = db.IntegerField() #订单Id sid = db.IntegerField() #商品Id said = db.IntegerField() #商品规格Id num = db.TinyIntegerField(default=0) #数量 class Meta: db_table = 'orderitems'
class CreditLog(db.Model): id = db.PrimaryKeyField() uid = db.IntegerField(default=0) #用户Id mobile = db.CharField(max_length=11) #用户名 ctype = db.TinyIntegerField(max_length=1) #扣分 0奖励 1扣除 affect = db.SmallIntegerField(max_length=6) #积分 log = db.CharField(max_length=100) #说明 created = db.IntegerField(max_length=10, default=int(time.time())) #时间 class Meta: db_table = 'creditlogs' order_by = ('-id', )
class User(db.Model): """ 用户 """ id = db.PrimaryKeyField() mobile = db.CharField(unique = True, max_length=11, null = False) # 注册手机号 password = db.CharField(max_length=32) # 密码 realname = db.CharField(max_length=10) # 真实姓名 gender = db.TinyIntegerField(default=2) # 性别 0男 1女 2未知 qq = db.CharField(max_length=15) # qq birthday = db.DateField(default='1980-01-01') # 生日 tel = db.CharField(max_length=30) # 固定电话 credit = db.SmallIntegerField(default=0) # 积分 order = db.SmallIntegerField(default=0) # 订单 consult = db.SmallIntegerField(default=0) # 咨询 group = db.TinyIntegerField(**{'default' : 1}) # 用户组 0被禁止的用户 1正常用户 9管理员 signuped = db.IntegerField(default=int(time.time())) # 时间 lsignined = db.IntegerField(default=int(time.time())) # 最后登录时间 @staticmethod def create_password(raw): return hashlib.new("md5", raw).hexdigest() def check_password(self, raw): return hashlib.new("md5", raw).hexdigest() == self.password def validate(self): if self.mobile and vmobile(self.mobile): if User.select().where(User.mobile == self.mobile).count() > 0: raise Exception('此用户名已使用') else: raise Exception('请输入正确的手机号码') def updatesignin(self): self.lsignined = int(time.time()) self.save() class Meta: db_table = 'user'
class Area(db.Model): id = db.TinyPrimaryKeyField() pid = db.TinyIntegerField(default=0) name = db.CharField(max_length=30) def validate(self): if self.name: ft = (Area.name == self.name) if self.id: ft = ft & (Area.id != self.id) if Area.select().where(ft).count() > 0: raise Exception('地区名已存在') else: raise Exception('请输入地区名') class Meta: db_table = 'areas'
class Order(db.Model): id = db.PrimaryKeyField() uid = db.IntegerField(default=0) #用户Id mobile = db.CharField(max_length=11) #注册手机号 uaid = db.IntegerField(default=0) #收件地址 distrid = db.TinyIntegerField(default=0) #配送方式 distribbed = db.CharField(max_length=24) #配送时间 payment = db.TinyIntegerField(max_length=1, default=1) #付款方式 0货到付款 1支付宝 message = db.CharField() #付款留言 isinvoice = db.TinyIntegerField(max_length=1, default=0) #是否开发票 invoicesub = db.TinyIntegerField(max_length=1, default=0) #发票抬头 0个人 1公司 invoicename = db.CharField(max_length=80) #个人或公司名称 invoicecontent = db.TinyIntegerField(max_length=1, default=1) #发票类型 0蛋糕 1食品 shippingprice = db.FloatField(default=0.0) #配送价格 price = db.FloatField(default=0.0) #价格 status = db.TinyIntegerField(max_length=1, default=0) #订单状态 0等待付款 1付款成功 2已送货 3交易完成 4已取消 ordered = db.IntegerField(default=int(time.time())) #下单时间 class Meta: db_table = 'orders'