class House(BaseModel, db.Model): '''房屋信息''' __tablename__ = "ih_house_info" id = db.Column(db.Integer, primary_key=True) #房屋编号 user_id = db.Column(db.Integer, db.ForeignKey("ih_user_profile.id"), nullable=False) #房屋主人的用户编号 area_id = db.Column(db.Integer, db.ForeignKey("ih_area_info.id"), nullable=False) #归属地的区域编号 title = db.Column(db.String(64), nullable=False) #标题 price = db.Column(db.Integer, default=0) # 单价,单位:分 address = db.Column(db.String(512), default='') #地址 room_count = db.Column(db.Integer, default=1) #房间数目 acreage = db.Column(db.Integer, default=0) #房屋面积 unit = db.Column(db.String(32), default='') #房屋单元,如几室几厅 capacity = db.Column(db.Integer, default=1) #房屋容纳的人数 beds = db.Column(db.String(64), default='') #房屋床铺的配置 deposit = db.Column(db.Integer, default=0) #房屋押金 min_days = db.Column(db.Integer, default=1) #最少入住天数 max_days = db.Column(db.Integer, default=0) #最多入住天数,0表示不限制 order_count = db.Column(db.Integer, default=0) #预订完成的该房屋的订单数 index_image_url = db.Column(db.String(256), default="") #房屋主图片的路径 # secondary相当于找中间表 # 所有的relationship都表中都是没有的,ForeignKey到时会在表中建一个字段 facilities = db.relationship("Facility", secondary=house_facilyty) #房屋的设施 images = db.relationship("HouseImage") #房屋的图片 orders = db.relationship("Order", backref='house') #房屋的订单
class House(BaseModel): __tablename__ = 'ihome_python_house_info' id = db.Column(db.Integer, primary_key=True) # 在多表中建立外键 user_id = db.Column(db.Integer, db.ForeignKey('ihome_python_user_profile.id'), nullable=False) area_id = db.Column(db.Integer, db.ForeignKey('ihome_python_area_info.id'), nullable=False) title = db.Column(db.String(64), nullable=False) # 标题 price = db.Column(db.Integer, default=0) # 单价,单位:分 address = db.Column(db.String(512), default="") # 地址 room_count = db.Column(db.Integer, default=1) # 房间数目 acreage = db.Column(db.Integer, default=0) # 房屋面积 unit = db.Column(db.String(32), default="") # 房屋单元, 如几室几厅 capacity = db.Column(db.Integer, default=1) # 房屋容纳的人数 beds = db.Column(db.String(64), default="") # 房屋床铺的配置 deposit = db.Column(db.Integer, default=0) # 房屋押金 min_days = db.Column(db.Integer, default=1) # 最少入住天数 max_days = db.Column(db.Integer, default=0) # 最多入住天数,0表示不限制 order_count = db.Column(db.Integer, default=0) # 预订完成的该房屋的订单数 index_image_url = db.Column(db.String(256), default="") # 房屋主图片的路径 facilities = db.relationship('Facility', secondary=house_facility) images = db.relationship('HouseImage') orders = db.relationship('Order', backref='house')
class HouseImage(BaseModel,db.Model): """房屋图片""" __tablename__ = "i_house_image" id = db.Column(db.Integer,primary_key=True) house_id = db.Column(db.Integer,db.ForeignKey("i_house.id"),nullable=False) # 房屋编码 url = db.Column(db.String(256),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( #枚举, django choice "WAIT_ACCEPT", #待接单 "WAIT_PAYMENT", #待支付 "PAID", #已支付 "WAIT_COMMENT", #待评价 "COMPLETE", #已完成 "CANCELED", #已取消 "REJECTED" #已拒单 ), default="WAIT_ACCEPT", index=True #指明在mysql中这个字段建立索引,加快查询速度 ) comment = db.Column(db.Text) #订单的评论信息或者拒单原因 trade_no = db.Column(db.String(80)) #交易的流水号,支付宝的
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) house = db.relationship("House", backref="area")
class Area(BaseModel): __tablename = 'ihome_python_area_info' id = db.Column(db.Integer, primary_key=True) # 区域编号 name = db.Column(db.String(32), nullable=False) # 区域名字 houses = db.relationship('House', backref='area')
class HouseImage(BaseModel): __tablename__ = "ihome_python_house_image" id = db.Column(db.Integer, primary_key=True) house_id = db.Column(db.Integer, db.ForeignKey("ihome_python_house_info.id"), nullable=False) # 房屋编号 url = db.Column(db.String(256), nullable=False) # 图片的路径
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 HouseImg(db.Model): """房屋类型""" __tablename__ = "t_house_image" __table_args__ = {"useexisting": True} image_id = db.Column(db.Integer, primary_key=True) house_id = db.Column(db.Integer) url = db.Column(db.String(255))
class Tag(db.Model): """房屋类型""" __tablename__ = "t_house_tag" __table_args__ = {"useexisting": True} tag_id = db.Column(db.Integer, primary_key=True) house_id = db.Column(db.Integer) content = db.Column(db.String(11))
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) # 订单的评论信息或者拒单原因 trade_no = db.Column(db.String(128)) # 支付宝的交易编号 def to_dict(self): """将订单信息转换为字典数据""" order_dict = { "order_id": self.id, "title": self.house.title, "img_url": constants.QINIU_URL_DOMAIN + 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 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 """
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 Facility(BaseModel, db.Model): """设施信息""" __tablename__ = "ihome_facility" id = db.Column(db.Integer, primary_key=True) # 设施编号 name = db.Column(db.String(32), nullable=False) # 设施名字 css = db.Column(db.String(30)) # 设施展示的图标 def to_dict(self): return { 'id': self.id, 'name': self.name, 'css': self.css } def to_house_dict(self): return {'id': self.id}
class Area(BaseModel, db.Model): __tablename__ = 'ihome_python_area_info' id = db.Column(db.Integer, primary_key=True) # 区域编号 name = db.Column(db.String(32), nullable=False) # 区域名字 houses = db.relationship('House', backref='area', lazy='dynamic') def to_dict(self): d = {'aid': self.id, 'aname': self.name} return d
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): return {"aid": self.id, "aname": self.name}
class Area(BaseModel, db.Model): """城区""" __tablename__ = "ih_area_info" area_id = db.Column(db.Integer, primary_key=True) # 区域编号 area_name = db.Column(db.String(32), nullable=False) # 区域名字 houses = db.relationship("House", backref="area") # 区域的房屋 # 将对象转换为字典 def to_dic(self): dic = {"id": self.area_id, "name": self.area_name} return dic
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) # 城区名字 hourses = db.relationship('House', backref='area') # 城区的房屋 def to_dict(self): area_dict = {'aid': self.id, 'aname': self.name} return area_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) house = db.relationship("House", backref="area") def to_dict(self): """将对象转换为字典""" d = {"aid": self.id, "aname": self.name} return d
class User(BaseModel, db.Model): """用户""" __tablename__ = "ih_user_profile" id = db.Column(db.Integer, primary_key=True) # 用户编号 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) # 手机号 real_name = db.Column(db.String(32)) # 真实姓名 id_card = db.Column(db.String(20)) # 身份证号 avatar_url = db.Column(db.String(128)) # 用户头像路径 houses = db.relationship("House", backref="user") # 用户发布的房屋 orders = db.relationship("Order", backref="user") # 用户下的订单 @property def password(self): # return self.password_hash raise AttributeError('改属性只能设置,不能读取') @password.setter def password(self, origin_password): self.password_hash = generate_password_hash(origin_password) def __repr__(self): return f'<User: {self.name}>'
class User(BaseModel, db.Model): """用户""" __tablename__ = "ih_user_profile" id = db.Column(db.Integer, primary_key=True) # 用户编号 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) # 手机号 real_name = db.Column(db.String(32)) # 真实姓名 id_card = db.Column(db.String(20)) # 身份证号 avatar_url = db.Column(db.String(128)) # 用户头像路径 # 在一的一方, 添加relationship, 同时添加反向引用 houses = db.relationship("House", backref="user") # 用户发布的房屋 orders = db.relationship("Order", backref="user") # 用户下的订单 # 在User下方增加以下函数 # 通过property装饰器, 将password函数提升为属性 @property def password(self): # 在属性的getter方法中, 禁止访问密码数据 raise AttributeError('禁止访问用户密码') @password.setter def password(self, value): # 在属性的setter方法中执行加密处理 # 直接传入value即可, 默认sha256, 并会生成随机的8位盐值 self.password_hash = generate_password_hash(value) # 在User下方增加以下函数 def check_password(self, value): """检查用户密码, value 是用户填写密码""" return check_password_hash(self.password_hash, value) def to_dict(self): """将对象转换为字典数据""" user_dict = { "user_id": self.id, "name": self.name, "mobile": self.mobile, "avatar": constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else '', "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S") } return user_dict def auth_dict(self): '''将实名信息转换为字典数据''' auth_dict = { "user_id": self.id, "real_name": self.real_name, "id_card": self.id_card } return auth_dict
class User(BaseModel, db.Model): """用户""" __tablename__ = "ih_user_profile" id = db.Column(db.Integer, primary_key=True) # 用户编号 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) # 手机号 real_name = db.Column(db.String(32)) # 真实姓名 id_card = db.Column(db.String(20)) # 身份证号 avatar_url = db.Column(db.String(128)) # 用户头像路径 houses = db.relationship("House", backref="user") # 用户发布的房屋 orders = db.relationship("Order", backref="user") # 用户下的订单 @property def password(self): raise AttributeError("不允许此操作") @password.setter def password(self, value): self.password_hash = generate_password_hash(value) def chek_password(self, value): return check_password_hash(self.password_hash, value) def to_dict(self): return { "name": self.name, "mobile": self.mobile, "real_name": self.real_name, "id_card": self.id_card }
class User(BaseModel, db.Model): """用户""" __tablename__ = "ih_user_profile" id = db.Column(db.Integer, primary_key=True) # 用户编号 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) # 手机号 real_name = db.Column(db.String(32)) # 真实姓名 id_card = db.Column(db.String(20)) # 身份证号 avatar_url = db.Column(db.String(128)) # 用户头像路径 # 在一的一方, 添加relationship, 同时添加反向引用 houses = db.relationship("House", backref="user") # 用户发布的房屋 orders = db.relationship("Order", backref="user") # 用户下的订单 # 提升函数为属性 --> 默认是getter方法 @property def password(self): """关于密码不需要别人获取""" raise AttributeError('不支持读取操作') @password.setter def password(self, value): # 属性的setter方法, 需要传入用户的密码 self.password_hash = generate_password_hash(value) # 检查密码的函数 def check_password_hash(self, value): # 需要传入之前的加密项, 及现在的密码 return check_password_hash(self.password_hash, value) def to_dict(self): """将对象转换为字典数据""" user_dict = { "user_id": self.id, "name": self.name, "mobile": self.mobile, "avatar": constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else "", "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S") } return user_dict def auth_to_dict(self): """将实名信息转换为字典数据""" auth_dict = { "user_id": self.id, "real_name": self.real_name, "id_card": self.id_card } return auth_dict
class User(BaseModel, db.Model): """用户模型""" __tablename__ = 'ih_user_profile' id = db.Column(db.Integer, primary_key=True) # 用户编号 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) # 手机号 real_name = db.Column(db.String(32)) # 真实姓名 id_card = db.Column(db.String(20)) # 证件号 avatar_url = db.Column(db.String(128)) # 头像路径 houses = db.relationship('House', backref='user') # 用户发布的房屋 orders = db.relationship('Order', backref='user') # 用户下的订单 @property def password(self): raise AttributeError('这个属性只能设置不能读取') @password.setter def password(self, value): self.password_hash = generate_password_hash(value) def check_password(self, password): return check_password_hash(self.password_hash, password) def to_dict(self): """ 将对象转换为字典数据 :return: """ user_dict = { 'user_id': self.id, 'name': self.name, 'mobile': self.mobile, 'avatar': constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else "", 'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S') } return user_dict def auth_to_dict(self): """ 将实名信息转为字典数据 :return: """ auth_dict = { 'user_id': self.id, 'real_name': self.real_name, 'id_card': self.id_card } return auth_dict
class HouseType(db.Model): """房屋类型""" __tablename__ = "t_house_type" __table_args__ = {"useexisting": True} type_id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(10)) def to_dict(self): """将对象转换为字典""" d = { "aid": self.type_id, "aname": self.name } return d
class User(BaseModel, db.Model): """用户""" __tablename__ = "ih_user_profile" id = db.Column(db.Integer, primary_key=True) 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) real_name = db.Column(db.String(32)) id_card = db.Column(db.String(20)) avatar_url = db.Column(db.String(128)) houses = db.relationship("House", backref="user") orders = db.relationship("Order", backref="user") @property def password(self): raise AttributeError("此属性只能设置,不可读取") @password.setter def password(self, value): self.password_hash = generate_password_hash(value) def check_passed(self, passwd): """ 检验密码正确性 :param passwd: 用户登录时填写的原始密码 :return:如果正确返回True,否则返回False """ return check_password_hash(self.password_hash, passwd) def to_dict(self): """将对象转换为字典数据""" user_dict = { "user_id": self.id, "name": self.name, "mobile": self.mobile, "avatar": constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else "", "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S") } return user_dict def auth_to_dict(self): """将实名信息转换为字典数据""" auth_dict = { "user_id": self.id, "real_name": self.real_name, "id_card": self.id_card } return auth_dict
class User(BaseModel, db.Model): """用户""" __tablename__ = "ih_user_profile" id = db.Column(db.Integer, primary_key=True) # 用户编号 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) # 手机号 real_name = db.Column(db.String(32)) # 真实姓名 id_card = db.Column(db.String(20)) # 身份证号 avatar_url = db.Column(db.String(128)) # 用户头像路径 houses = db.relationship("House", backref="user") # 用户发布的房屋 orders = db.relationship("Order", backref="user") # 用户下的订单 @property def password(self): """对应password属性的读取操作""" raise AttributeError("不支持读取操作") @password.setter def password(self, value): """对应password属性的设置操作, value用户设置的密码值""" self.password_hash = generate_password_hash(value) def check_password(self, value): """检查用户密码, value 是用户填写密码""" return check_password_hash(self.password_hash, value) def to_dict(self): """将对象转换为字典数据""" user_dict = { "user_id": self.id, "name": self.name, "mobile": self.mobile, "avatar": constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else "", "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S") } return user_dict def auth_to_dict(self): """将实名信息转换为字典数据""" auth_dict = { "user_id": self.id, "real_name": self.real_name, "id_card": self.id_card } return auth_dict
class User(BaseModel, db.Model): __tablename__ = 'ihome_python_user_profile' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(32), unique=True, nullable=False) password_hash = db.Column(db.String(128), unique=True, nullable=False) mobile = db.Column(db.String(11), unique=True, nullable=False) real_name = db.Column(db.String(32)) id_card = db.Column(db.String(20)) # 用户头像路径 avatar_url = db.Column(db.String(128)) # 在一表中,或者多表中写relationship houses = db.relationship('House', backref='user') orders = db.relationship('Order', backref='user') @property def password(self): raise AttributeError @password.setter def password(self, pwd): #self.password_hash = generate_password_hash(pwd) self.password_hash = pwd def check_password(self, pwd): #return check_password_hash(self.password_hash, pwd) return self.password_hash == pwd def to_dict(self): user_dict = { "user_id": self.id, "name": self.name, "mobile": self.mobile, "avatar": constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else "", "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S") } return user_dict def auth_to_dict(self): auth_dict = { 'user_id': self.id, 'real_name': self.real_name, 'id_card': self.id_card } return auth_dict
class User(BaseModel, db.Model): """用户""" __tablename__ = "ih_user_profile" id = db.Column(db.Integer, primary_key=True) # 用户编号 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) # 手机号 real_name = db.Column(db.String(32)) # 真实姓名 id_card = db.Column(db.String(20)) # 身份证号 avatar_url = db.Column(db.String(128)) # 用户头像路径 # 在一的一方, 添加relationship, 同时添加反向引用 houses = db.relationship("House", backref="user") # 用户发布的房屋 orders = db.relationship("Order", backref="user") # 用户下的订单 # 希望再提供一个password属性, 能够直接进行密码的设置 # @property: 将下面的函数提升为属性(getter) @property def password(self): raise AttributeError('不允许访问密码') @password.setter def password(self, value): # 在属性的setter方法中进行密码加密处理 self.password_hash = generate_password_hash(value) # 在User下方增加以下函数 def check_password(self, value): """检查用户密码, value 是用户填写密码""" return check_password_hash(self.password_hash, value) def to_dict(self): """将对象转换为字典数据""" # 根据前端的需求, 返回对应字段的信息 user_dict = { "user_id": self.id, "name": self.name, "mobile": self.mobile, "avatar": constants.QINIU_URL_DOMAIN + self.avatar_url if self.avatar_url else "", "create_time": self.create_time.strftime("%Y-%m-%d %H:%M:%S") } return user_dict def auth_to_dict(self): """将实名信息转换为字典数据""" auth_dict = { "user_id": self.id, "real_name": self.real_name, "id_card": self.id_card } return auth_dict
class User(db.Model): """用户""" __tablename__ = "t_user" __table_args__ = {"useexisting": True} user_id = db.Column(db.Integer, primary_key=True) mobile = db.Column(db.String(11), unique=True, nullable=True) username = db.Column(db.String(32), unique=True, nullable=True) password = db.Column(db.String(32), nullable=True, ) real_name = db.Column(db.String(32)) real_id_card = db.Column(db.String(18)) avatar_url = db.Column(db.String(128))