class CategoryAttr(SurrogatePK, Model): """默认的三个类型选项 用户无法更改,mark标记唯一, 管理员更改,外键模板 模板可添加多个文章页等 数据库读取mark标记 """ __tablename__ = 'category_attrs' name = Column(db.String(80), nullable=False) summary = Column(db.String(80), nullable=False) mark = Column(db.String(80), nullable=False) #链接地址 url = Column(db.String(80), nullable=False) #模板页 templates = Column(db.String(80), nullable=False) #用户分类 category = relationship('Category', backref='categorys_attr', lazy='select') #默认内容 static_context = relationship('TemplatesDefault', backref='category_attrs') #模板 usertemplate_id = reference_col('user_templates') #: 栏目页 ,(文章页,图集页,内容页 ) def __repr__(self): return '<({name!r})>'.format(name=self.name)
class Img(CRUDMixin, db.Model): __tablename__ = 'img_is' id = db.Column(db.Integer, primary_key=True) path = db.Column(db.String()) name = db.Column(db.String()) old_size = db.Column(db.String()) new_size = db.Column(db.String()) id_user = db.Column(db.Integer, db.ForeignKey('user_is.id', ondelete='CASCADE')) date_create = db.Column(db.DateTime(), default=datetime.now()) @property def to_json(self): """Return object data in easily serializable format""" return { 'id': self.id, 'path': self.path.split("main")[-1], 'name': self.name, 'old_size': self.old_size, 'new_size': self.new_size, "id_user": self.id_user, "date_create": self.date_create.strftime("%d.%m.%Y %H:%M:%S"), } def __repr__(self): return f"<Img-ID:{self.id} NAME: {self.name} >"
class Car(SurrogatePK, Model): __tablename__ = "car" number = Column(db.String(100), comment='车牌号') car_type = Column(db.String(100), comment='车辆类型') brand = Column(db.String(100), comment='品牌') colour = Column(db.String(100), comment='颜色') status = Column(db.Integer(), default=0, comment='状态默认') user_id = Column(db.Integer()) created_at = Column(db.DateTime, nullable=False, default=dt.datetime.now, comment='创建时间') @classmethod def insert_data(cls, form): status = True if form.get("status") else False cls.create( number=form.get("number"), car_type=form.get("car_type"), status=status, brand=form.get("brand"), colour=form.get("colour"), user_id=form.get("user_id"), )
class Category(SurrogatePK,Model): """产品分类表:categorys 列表参数: - product_id:外键产品表 产品id - name:分类名称 - ico:分类图标 - sort:分类排序 - active:是否激活 用户是否删除? - show:是否显示 """ __tablename__ = 'categorys' name = Column(db.String(100)) ico = Column(db.String(200)) sort = Column(db.Integer()) active = Column(db.Boolean(),default=True) show = Column(db.Boolean(),default=True) #:自身上级,引用自身无限级分类 parent = reference_col('categorys') childrens = relationship("Category",lazy="joined",join_depth=2) product_id = relationship(Product, backref='products')
class SysParam(SurrogatePK, Model): """系统参数表 表名称:sysparam 列表参数 - web_name:站点名称 - web_describe:站点描述 - user_register:开放注册 - active_site:是否启用站点 - close_website_message:关闭站点提示消息 - close_register_user_message:关闭会员注册提示消息 - withdraw_money:允许提现 """ __tablename__ = 'sysconfig' web_name = Column(db.String(80), nullable=False) web_describe = Column(db.String(500)) user_register = Column(db.Boolean, default=True) active_site = Column(db.Boolean, default=True) close_website_message = Column(db.String(500)) close_register_user_message = Column(db.String(500)) withdraw_money = Column(db.Boolean(), default=True) def init_insert(): db.session.add(SysConfig(web_name='default')) db.session.commit()
class Grade(SurrogatePK, Model): __tablename__ = 'grade' __table_args__ = {'comment': '年级班级表'} name = Column(db.String(100), comment='班级名称') remark = Column(db.String(200), comment='描述') teacher_id = Column(db.Integer(), comment='教师ID') sort = Column(db.Integer(), default=100) @classmethod def insert_data(cls, form): teacher_id = form.get("teacher_id") if form.get("teacher_id") else 0 sort = form.get("sort") if form.get("sort") else 100 phone = form.get('phone') teacher = Teacher.query.filter_by(phone=phone).first() if not teacher: flash("该手机号不正确,没有对应的教师") return False cls.create( name=form.get("name"), remark=form.get("remark"), teacher_id=teacher.id, sort=sort, )
class Role(SurrogatePK, Model): """A role for a user.""" __tablename__ = "roles" name = Column(db.String(80), nullable=False) pid = Column(db.Integer(),comment="上级") remark = Column(db.String(100),comment="描述") sort = Column(db.Integer(),server_default='100',comment='排序') create_at = Column(db.DateTime(),comment='创建时间',default=dt.datetime.now) is_del = Column(db.Boolean(),comment="是否删除",default=False) def __init__(self, name, **kwargs): """Create instance.""" db.Model.__init__(self, name=name, **kwargs) def __repr__(self): """Represent instance as a unique string.""" return f"<Role({self.name})>" @classmethod def insert_data(cls,form): sort = form.get("is_url") if form.get("is_url") else 100 is_url = True if form.get("is_url") else '' pid = True if form.get("pid") else 0 is_del = True if form.get("pid") else False cls.create( name = form.get("name"), pid = pid, remark = form.get("remark"), sort = sort, is_del = is_del, )
class User(CRUDMixin, db.Model): __tablename__ = 'user_is' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(30)) password = db.Column(db.String(255)) date_create = db.Column(db.DateTime(), default=datetime.now()) @property def to_json(self): """Return object data in easily serializable format""" return { 'id': self.id, 'name': self.name, 'date_create': self.date_create.strftime("%A, %d. %B %Y %I:%M%p"), } def check_encrypted_password(self, p): return pwd_context.verify(p + current_app.config['SALT'], self.password) @classmethod def encrypt_password(cls, password): return pwd_context.encrypt(password + current_app.config['SALT']) @classmethod def get_by_name(cls, name): return cls.query.filter_by(name=name).first() def __repr__(self): return f"<User-ID:{self.id} NAME: {self.name} >"
class Access(SurrogatePK, Model): __tablename____ = "access" __table_args__ = {'comment': '权限表'} url = Column(db.String(200), nullable=False, comment="路由正则匹配") name = Column(db.String(100), comment="节点名称") status = Column(db.Integer(), comment="状态", default=1) sort = Column(db.Integer(), comment="排序", default=100) is_del = Column(db.Boolean(), comment="是否删除", default=False) create_at = Column(db.DateTime(), default=dt.datetime.now, comment='创建时间') user_id = Column(db.Integer(), comment="创建用户") @classmethod def insert_data(cls, form): status = True if form.get("status") else False sort = form.get("sort") if form.get("sort") else 100 is_del = True if form.get("is_del") else False is_url = form.get("is_url") if form.get("is_url") else '' pid = form.get("pid") if form.get("pid") else 0 is_del = True if form.get("pid") else False cls.create(name=form.get("name"), url=form.get("url"), status=status, sort=sort, is_del=is_del, user_id=current_user.id)
class Order(SurrogatePK, Model): """订单表:orders 列表参数: - users_id:外键用户表 购买人 - products_id:外键产品表 产品id - created_at:创建时间 - consignee:收货人 - consignee_phone:收货人电话 - consignee_adress:收货人地址 - count:购买总数量 - price:总金额 - pay_type:支付类型 注册激活、积分购买、等等 - buy_type:购买类型 商城购买、注册购买 - state:订单状态 默认0 """ __tablename__ = 'orders' users_id = reference_col('users') products_id = reference_col('products') consignee = Column(db.String(30)) consignee_phone = Column(db.String(30)) consignee_address = Column(db.String(200)) count = Column(db.Integer()) price = Column(db.Numeric(precision=10,scale=2,\ asdecimal=True, decimal_return_scale=None),default=0) pay_type = Column(db.String(100)) buy_type = Column(db.String(100)) state = Column(db.Integer(), default=0) created_at = Column(db.DateTime, nullable=False, default=datetime.datetime.now)
class Menu(SurrogatePK, Model): __tablename__ = "menu" __table_args__ = {'comment': '菜单权限表'} title = Column(db.String(100), nullable=False) pid = Column(db.Integer(), comment="上级") status = Column(db.Integer(), comment="状态", default=0) sort = Column(db.Integer(), comment="排序", default=100) is_url = Column(db.Boolean(), comment="是否路由地址", default=False) url = Column(db.String(200), comment="路由地址") blueprint = Column(db.String(50), comment="蓝图地址") icon = Column(db.String(50), comment="图标") @classmethod def insert_data(cls, form): status = True if form.get("status") else False is_url = True if form.get("is_url") else False cls.create(title=form.get("title"), pid=form.get("pid"), status=status, sort=form.get("sort"), is_url=is_url, url=form.get("url"), blueprint=form.get("blueprint"), icon=form.get("icon"))
class Pages(CRUDMixin, db.Model): id = db.Column(db.Integer, primary_key=True) title= db.Column(db.String(264), index=True, unique=True) url = db.Column(db.String(64), index=True, unique=True) content = db.Column(db.Text) def __repr__(self): return '<Url Page {}>'.format(self.url)
class Outsiders(SurrogatePK, Model): """其他人员 外来人员""" __tablename__ = "outsiders" name = Column(db.String(50), comment='姓名') user_id = Column(db.Integer()) remark = Column(db.String(200), comment='描述')
class User(UserMixin, SurrogatePK, Model): """A user of the app.""" __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = Column(db.String(80), unique=True, nullable=False) email = Column(db.String(80), unique=True, nullable=False) #: The hashed password password = Column(db.Binary(128), nullable=True) created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow) first_name = Column(db.String(30), nullable=True) last_name = Column(db.String(30), nullable=True) active = Column(db.Boolean(), default=False) is_admin = Column(db.Boolean(), default=False) # roles = db.relationship( # 'Role', # secondary='users_roles', # backref=db.backref('roles', lazy='dynamic') # ) # def __init__(self, username, email, password=None, **kwargs): # """Create instance.""" # db.Model.__init__(self, username=username, email=email, **kwargs) # if password: # self.set_password(password) # else: # self.password = None def set_password(self, password): """Set password.""" self.password = bcrypt.generate_password_hash(password) def check_password(self, value): """Check password.""" return bcrypt.check_password_hash(self.password, value) @property def full_name(self): """Full user name.""" return '{0} {1}'.format(self.first_name, self.last_name) def __repr__(self): """Represent instance as a unique string.""" return '<User({username!r})>'.format(username=self.username) def add_role(self, role): self.roles.append(role) def add_roles(self, roles): for role in roles: self.add_role(role) def get_roles(self): for role in self.roles: yield role
class Banner(SurrogatePK,Model): __tablename__ = 'banners' #:横幅标题 title = Column(db.String(100)) #:横幅描述 summary = Column(db.String(200)) image = Column(db.String(200)) alt = Column(db.String(80)) sort = Column(db.Integer()) user = Column(db.Integer, db.ForeignKey('users.id'))
class Inventory(db.Model): __tablename__ = "inventory" id = db.Column(db.Integer, primary_key=True, autoincrement=True) code = db.Column(db.String(200), index=True, unique=True) type = db.Column(db.String(100), index=True) created_date = db.Column(db.DateTime, nullable=False, default=db.func.now()) assignee = db.Column(db.String(100), nullable=True) def __repr__(self) -> str: return f"<Iventory {self.id}:{self.code}>"
class SystemVersion(SurrogatePK, Model): __tablename__ = 'system_versions' #版本号 number = Column(db.String(20)) #标题 title = Column(db.String(100)) #描述 summary = Column(db.String(200)) #内容 context = Column(db.UnicodeText) created_at = Column(db.DateTime, nullable=False, default=dt.datetime.now)
class User(CRUDMixin, UserMixin, db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), index=True, unique=True) email = db.Column(db.String(120), index=True, unique=True) password_hash = db.Column(db.String(128)) def __repr__(self): return '<User {}>'.format(self.username) def set_password(self, password): self.password_hash = generate_password_hash(password) def check_password(self, password): return check_password_hash(self.password_hash, password)
class Product(SurrogatePK, Model): """产品列表 :products 列表参数: - name:产品名称 - price:销售价 - special_price:优惠价进货价 - note:详情 - attach_key:附加字段 - attach_value:附加值 - active:商品状态 - is_sell:是否出售 - order_id:外键订单表 - category_id:外键分类 """ __tablename__ = 'products' category_id = reference_col('categorys') name = Column(db.String(100)) price = Column(db.Numeric(precision=10,scale=2,\ asdecimal=True, decimal_return_scale=None)) special_price = Column(db.Numeric(precision=10,scale=2,\ asdecimal=True, decimal_return_scale=None)) note = Column(db.UnicodeText()) attach_key = Column(db.String(500)) attach_value = Column(db.String(500)) active = Column(db.Boolean(),default=True) is_sell = Column(db.Boolean(),default=True) #热门 0 不热门 1热门 hot = Column(db.Boolean(),default=True) #查看次数 click_count = Column(db.Integer(),default=0) #累计购买总数 buy_count = Column(db.Integer(),default=0) #条码 ean = Column(db.String(50)) #规格 unit = Column(db.Integer,default=1) #创建时间 created_at = Column(db.DateTime, default=datetime.datetime.now) #首页展示图 main_photo = Column(db.String(200)) def get_all(self): return Product.query.all()
class SysConfig(SurrogatePK, Model): """系统配置表 """ __tablename__ = 'sysconfig' #站点名称 web_name = Column(db.String(80), nullable=False) #站点描述 web_describe = Column(db.String(500)) #开放注册 user_register = Column(db.Boolean, default=True) #是否启用站点 active_site = Column(db.Boolean, default=True) def init_insert(): db.session.add(SysConfig(web_name='default')) db.session.commit()
class Role(SurrogatePK, Model, RoleMixin): """A role for a user.""" __tablename__ = 'roles' name = db.Column(db.String(80)) parents = db.relationship( 'Role', secondary=roles_parents, primaryjoin=("Role.id == roles_parents.c.role_id"), secondaryjoin=("Role.id == roles_parents.c.parent_id"), backref=db.backref('children', lazy='dynamic')) def __init__(self, name): RoleMixin.__init__(self) self.name = name def add_parent(self, parent): # You don't need to add this role to parent's children set, # relationship between roles would do this work automatically self.parents.append(parent) def add_parents(self, *parents): for parent in parents: self.add_parent(parent) @staticmethod def get_by_name(name): return Role.query.filter_by(name=name).first()
class UserMarkType(SurrogatePK,Model): __tablename__ = 'user_mark_types' name = Column(db.String(80)) user_mark = db.relationship('UserMark', backref='user_marks',uselist=False) user = reference_col('users')
class OrderProduct(SurrogatePK, Model): """订单商品列表 快照 列表参数: - name:名称 - thumbnail:缩略图 - - - """ __tablename__ = 'order_products' name = Column(db.String(100)) thumbnail = Column(db.String(200)) price = Column(db.Numeric(precision=10,scale=2,\ asdecimal=True, decimal_return_scale=None),default=0) count = Column(db.Integer())
class Category(SurrogatePK,Model): __tablename__ = 'categorys' #:栏目标题 title = Column(db.String(80),nullable=False) #:栏目描 summary = Column(db.String(100)) #:关键字 key = Column(db.String(80)) #:关键描述 word = Column(db.String(500)) #:创建时间 creation_date = Column(db.DateTime(),default=dt.datetime.now) #:排序 sort = Column(db.Integer,default=100) #:是否显示 is_enable = Column(db.Boolean,default=True) #:首页展示顺序 main_sort = Column(db.Integer,default=100) #:栏目静态内容 static_content = Column(db.UnicodeText) #:附加内容 attach_value = Column(db.UnicodeText) #状态 0用户删除不做正式删除 1正常 state = Column(db.Integer,default=1) attr_id = reference_col('category_attrs') #:所属用户栏目 user = reference_col('users') #:引用自身无限级分类 parent_id = reference_col('categorys') children = relationship("Category",lazy="joined",join_depth=2,post_update=True) #所属文章 article = relationship('Article', backref='categorys',lazy='dynamic') #所属图集 photo = relationship('Photo', backref='categorys',lazy='dynamic') #栏目静态内容 static_context = relationship('StaticContext', backref='categorys',lazy='dynamic') def __repr__(self): return '<CategoryAttr({name!r})>'.format(name=self.title)
class ContentAttr(SurrogatePK, Model): """内容属性, 默认的三个类型选项,mark标记唯一 用户无法更改 数据库 读取mark标记 #普通common 首页home 热门hot 推荐recd """ __tablename__ = 'content_attrs' name = Column(db.String(80), nullable=False) mark = Column(db.String(80),unique=True,nullable=False) #文章 article = db.relationship('Article', backref='content_attrs',lazy='dynamic') #图集 photo = db.relationship('Photo', backref='content_attrs',lazy='dynamic') def __repr__(self): return '<ArticeAttr({name!r})>'.format(name=self.name)
class UserMark(SurrogatePK,Model): __tablename__ = 'usermarks' #用户姓名 name = Column(db.String(80)) #联系电话 phone = Column(db.String(20)) #留言内容 content = Column(db.UnicodeText) #用户头像 image = Column(db.String(200)) #:附加段、值 attach_key = Column(db.String(200)) attach_value = Column(db.String(500)) creation_date = Column(db.DateTime(),default=dt.datetime.now) user_mark_type = Column(db.Integer, db.ForeignKey('user_mark_types.id')) user = reference_col('users')
class UserUrlAndTemplate(SurrogatePK, Model): __tablename__ = 'user_url_and_templates' user_url = Column(db.String(100), nullable=False) user = reference_col('users') template = reference_col('user_templates') created_at = Column(db.DateTime, nullable=False, default=dt.datetime.now) end_time_at = Column(db.DateTime, nullable=False, default=dt.datetime.now)
class User(UserMixin, SurrogatePK, Model): """A user of the app.""" __tablename__ = 'users' username = Column(db.String(80), unique=True, nullable=False) email = Column(db.String(80), unique=True, nullable=False) #: The hashed password password = Column(db.Binary(128), nullable=True) created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow) first_name = Column(db.String(30), nullable=True) last_name = Column(db.String(30), nullable=True) active = Column(db.Boolean(), default=False) is_admin = Column(db.Boolean(), default=False) def __init__(self, username, email, password=None, **kwargs): """Create instance.""" db.Model.__init__(self, username=username, email=email, **kwargs) if password: self.set_password(password) else: self.password = None def set_password(self, password): """Set password.""" self.password = bcrypt.generate_password_hash(password) def check_password(self, value): """Check password.""" return bcrypt.check_password_hash(self.password, value) @property def full_name(self): """Full user name.""" return '{0} {1}'.format(self.first_name, self.last_name) def __repr__(self): """Represent instance as a unique string.""" return '<User({username!r})>'.format(username=self.username)
class Staff(SurrogatePK, Model): """职工""" __tablename__ = "staff" name = Column(db.String(50), comment='姓名') number_id = Column(db.String(50), comment='员工编号') sex = Column(db.Integer(), default=0, comment="性别0女1男") status = Column(db.Integer(), default=0, comment="状态 默认0 未定义") remark = Column(db.String(200), comment='描述') phone = Column(db.String(50), comment='电话') user_id = Column(db.String(50), comment='') @classmethod def insert_data(cls, form): status = True if form.get("status") else False sex = True if form.get("sex") else False cls.create(name=form.get("name"), number_id=form.get("number_id"), sex=sex, status=status, phone=form.get("phone"))
class Article(SurrogatePK,Model): __tablename__ = 'articles' #:文章标题 title = Column(db.String(80),nullable=False) #:作者 author = Column(db.String(80)) #:来源 source = Column(db.String(80)) #:文章描述 summary = Column(db.String(500)) #:关键字 key = Column(db.String(80)) #:关键描述 word = Column(db.String(500)) #:创建时间 creation_date = Column(db.DateTime(),default=dt.datetime.now) #:是否显示 is_enable = Column(db.Boolean,default=True) #:内容 content = Column(db.UnicodeText) #:浏览次数 count = Column(db.Integer,default=100) #缩略图 #保存路径 image = Column(db.String(200)) image_alt = Column(db.String(80)) #文章属性 #附加字段,附加字段值 attach_key = Column(db.String(200)) attach_value = Column(db.String(500)) #静态内容,用“|”号隔开 static_context = Column(db.UnicodeText) attr_id = reference_col('content_attrs') category = reference_col('categorys') user = reference_col('users')