class Deal(db.Model): # 1 user to multi deals id = db.Column(db.Integer, primary_key=True) time = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) by_id = db.Column(db.Integer, db.ForeignKey('user.id')) item_id = db.Column(db.Integer, db.ForeignKey('post.id'))
class Category(db.Model): __tablename__ = 'category' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), unique=True) description = db.Column(db.String(100), nullable=True) image_file = db.Column(db.String, nullable=False, default='default category.jpg')
class Admin(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) superusername = db.Column(db.String(20)) password_hash = db.Column(db.String(128)) # relationships def set_password(self, password): self.password_hash = generate_password_hash(password) def validate_password(self, password): return check_password_hash(self.password_hash, password)
class Deal(db.Model): # 1 user to multi deals id = db.Column(db.Integer, primary_key=True) time = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) # link the deal to the user who makes the deal by_id = db.Column(db.Integer, db.ForeignKey('user.id')) by = db.relationship('User', backref='deals') # link the deal to the item item_id = db.Column(db.Integer, db.ForeignKey('post.id')) item = db.relationship('Post', backref='deals') admin = db.Column(db.Integer, db.ForeignKey('admin.id'))
class Category(db.Model): __tablename__ = 'category' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30), unique=True) description = db.Column(db.String(100), nullable=True) image_file = db.Column(db.String, nullable=False, default='default category.jpg') #relationships post_id = db.relationship("Post", secondary=post_category_collections, backref='categories', lazy='dynamic') admin = db.Column(db.Integer, db.ForeignKey('admin.id'))
class Admin(db.Model, UserMixin): id = db.Column(db.Integer, primary_key=True) superusername = db.Column(db.String(20)) password_hash = db.Column(db.String(128)) # relationships posts = db.relationship('Post') users = db.relationship('User') deals = db.relationship('Deal') categories = db.relationship('Category') def set_password(self, password): self.password_hash = generate_password_hash(password) def validate_password(self, password): return check_password_hash(self.password_hash, password)
class Post(db.Model): __tablename__ = 'post' __searchable__ = ['title', 'subtitle', 'content'] id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(20), nullable=False) subtitle = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) price = db.Column(db.Integer, nullable=False, default=0) image_file = db.Column(db.String, nullable=False, default='default post.jpg') likes = db.Column(db.Integer, nullable=True, default=0) #relationships admin = db.Column(db.Integer, db.ForeignKey('admin.id')) # category_id = db.relationship("Category", secondary= post_category_collections, backref = "posts", lazy = 'dynamic') category_id = db.Column(db.Integer, nullable=True, default='Unclassified')
class User(db.Model, UserMixin): __searchable__ = ['username'] id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) password = db.Column(db.String(60), nullable=False) image_file = db.Column(db.String, nullable=False, default='default profile.jpg') # relationships admin = db.Column(db.Integer, db.ForeignKey('admin.id'))
time = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) # link the deal to the user who makes the deal by_id = db.Column(db.Integer, db.ForeignKey('user.id')) by = db.relationship('User', backref='deals') # link the deal to the item item_id = db.Column(db.Integer, db.ForeignKey('post.id')) item = db.relationship('Post', backref='deals') admin = db.Column(db.Integer, db.ForeignKey('admin.id')) # post 和 category 实际为多对多,应该创建关联表进行连接 post_category_collections = db.Table( "post_category_collections", db.Column('post_id', db.Integer, db.ForeignKey("post.id")), db.Column('category_id', db.Integer, db.ForeignKey("category.id"))) class Post(db.Model): __tablename__ = 'post' __searchable__ = ['title', 'subtitle', 'content'] id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(20), nullable=False) subtitle = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) price = db.Column(db.Integer, nullable=False, default=0) image_file = db.Column(db.String,
class User(db.Model, UserMixin): __searchable__ = ['username'] id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(20), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) phone_number = db.Column(db.String(20), unique=False, nullable=True) password = db.Column(db.String(60), nullable=False) image_file = db.Column(db.String, nullable=False, default='default profile.jpg') membership = db.Column(db.String, nullable=False, default='none') # False or True membership_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) vip1 = db.Column(db.String, nullable=False, default='none') vip1_try_out = db.Column(db.String, nullable=False, default='yes') vip1_expire_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) vip2 = db.Column(db.String, nullable=False, default='none') vip2_try_out = db.Column(db.String, nullable=False, default='yes') vip2_expire_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) invitation_code_vip1 = db.Column(db.String(8), nullable=True) invitation_code_vip2 = db.Column(db.String(8), nullable=True) deals = db.relationship('Deal', backref='by') def get_reset_token(self, expires_sec=1800): s = Serializer(current_app.config['SECRET_KEY'], expires_sec) return s.dumps({'user_id': self.id}).decode('utf-8') @staticmethod def verify_reset_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: user_id = s.loads(token)['user_id'] except: return None return User.query.get(user_id)
class Post(db.Model): __tablename__ = 'post' __searchable__ = [ 'title_en', 'title_cn', 'subtitle_en', 'subtitle_cn', 'content_en', 'content_cn' ] id = db.Column(db.Integer, primary_key=True) title_en = db.Column(db.String(20), nullable=False) title_cn = db.Column(db.String(20), nullable=False) subtitle_en = db.Column(db.String(100), nullable=False) subtitle_cn = db.Column(db.String(100), nullable=False) content_en = db.Column(db.Text, nullable=False) content_cn = db.Column(db.Text, nullable=False) date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) price = db.Column(db.Integer, nullable=False, default=0) image_file = db.Column(db.String, nullable=False, default='LiyuanLing.png') source = db.Column(db.String, nullable=True, default='ins') avater = db.Column(db.String, nullable=True) picture_list = db.Column(db.String, nullable=True) classification = db.Column(db.String, nullable=False, default='vip2') #relationships deals = db.relationship('Deal', backref='what') # category_id = db.relationship("Category", secondary= post_category_collections, backref = "posts", lazy = 'dynamic') # category_id = db.Column(db.Integer, db.ForeignKey('category.id'), nullable = True, default = 'unclassified') categories = db.relationship('Category', secondary=post_category_collections, backref='posts') likeby = db.relationship('User', secondary=post_user_colloections, backref='like') total_like = db.Column(db.Integer, nullable=True, default=0) total_buy = db.Column(db.Integer, nullable=True, default=0)