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 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 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 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 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 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 UserRole(SurrogatePK, Model): __tablename__ = "user_role" user_id = Column(db.Integer(), comment='用户ID') role_id = Column(db.Integer(), comment='角色ID') @classmethod def insert_data(cls, form): user_id = form.get("user_id") role_id = form.get("role_id") result = cls.query.filter_by(user_id=user_id, role_id=role_id).first() if not result: cls.create(role_id=role_id, user_id=user_id)
class AskLeave(SurrogatePK, Model): """请假列表""" __tablename__ = "ask_leave" reason = Column(db.String(100), comment='请假事由') start_at = Column(db.DateTime, nullable=False, default=dt.datetime.now, comment='请假开始时间') end_at = Column(db.DateTime, nullable=False, comment='请假结束时间') status = Column(db.Integer(), default=0, comment='状态 0已发起 1审批中 2 完成审批 3已出校门 4请假完成 -1拒绝') send_user = Column(db.Integer(), comment='发起人') ask_user = Column(db.Integer(), comment='请假用户 谁要请假') created_at = Column(db.DateTime, nullable=False, default=dt.datetime.now, comment='创建时间') @classmethod def insert_data(cls, form): user = User.query.filter( or_(User.name == form.get("ask_user"), User.q_number == form.get("ask_user"))).first() if not user: flash("没有该用户") return False result = cls.query.filter_by(ask_user=user.id).filter( AskLeave.status.in_([0, 1, 2])).first() if result: flash("该用户已经在请假中了,不能重复申请假期") return False reason = form.get("reason_check") + "|" + form.get("reason") ask_id = cls.create( reason=reason, start_at=form.get("start_at"), end_at=form.get("end_at"), send_user=current_user.id, ask_user=user.id, ) AskApproved.insert_data(ask_id, user.id) # 此处应该发起通知 相关用户 flash("添加完成") return {"msg": "已发起请假,请等待审批", 'state': 1}
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 Outsiders(SurrogatePK, Model): """其他人员 外来人员""" __tablename__ = "outsiders" name = Column(db.String(50), comment='姓名') user_id = Column(db.Integer()) remark = Column(db.String(200), comment='描述')
class BuysCar(SurrogatePK, Model): """购物车 参数列表: - add_price:添加时的价格 - product_id:产品id,不做外键 - count:数量 """ __tablename__ = 'buys_car' add_price = Column(db.Numeric(precision=10,scale=2,\ asdecimal=True, decimal_return_scale=None),default=0) product_id = Column(db.Integer()) count = Column(db.Integer()) users_id = reference_col('users')
class StudentParentMap(SurrogatePK, Model): __tablename__ = "student_parent_map" parent_id = Column(db.Integer(), comment='家长ID') student_id = Column(db.Integer(), comment='学生ID') @classmethod def insert_data(cls, form): parent_id = form.get("parent_id") student_id = form.get("student_id") result = cls.query.filter_by(parent_id=parent_id, student_id=student_id).first() if not result: cls.create( parent_id=parent_id, student_id=student_id, )
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 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 RoleAccess(SurrogatePK,Model): """ 权限暂定menu菜单表 """ __tablename__ = "role_access" role_id = Column(db.Integer(),comment='角色ID') access_id = Column(db.Integer(),comment="权限ID") @classmethod def insert_data(cls,form): access_id = form.getlist("access") role_id = form.get("role_id") role_access = cls.query.filter_by(role_id=role_id).all() for x in role_access: cls.delete(x) for x in access_id: cls.create( role_id = role_id, access_id = x ) @classmethod def all_access_data(cls,role_id): all_access = Access.query.all() role_access = RoleAccess.query.with_entities(Access,RoleAccess).join(Access,Access.id==RoleAccess.access_id).filter(RoleAccess.role_id==role_id).all() access_data = {} for x in all_access: access_data[x.id] = [x.id,x.name,0] for x in role_access: if x[0].id in access_data.keys(): access_data[x[0].id] = [access_data[x[0].id][0],access_data[x[0].id][1],1] return access_data
class Teacher(SurrogatePK, Model): """教师""" __tablename__ = "teacher" 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 = 1 if form.get("status") else 0 sex = 1 if form.get("sex") else 0 cls.create(name=form.get("name"), number_id=form.get("number_id"), sex=sex, remark=form.get("remark"), phone=form.get("phone"), status=status)
class StudentParent(SurrogatePK, Model): """学生家长""" __tablename__ = "student_parent" name = 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='') parent_type = Column(db.String(50), comment='家长类型 父母 爷爷奶奶等') @classmethod def insert_data(cls, form): status = True if form.get("status") else False cls.create(name=form.get("name"), sex=form.get("sex"), status=form.get("status"), remark=form.get("remark"), phone=form.get("phone"), parent_type=form.get("parent_type"), user_id=form.get("user_id"))
class Student(SurrogatePK, Model): """学生""" __tablename__ = "student" 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='描述') user_id = Column(db.String(50), comment='') grade_id = Column(db.String(50), comment='') @classmethod def insert_data(cls, form): # 这里需要先添加user 获得user_id status = True if form.get("status") else False cls.create(name=form.get("name"), number_id=form.get("number_id"), sex=form.get("sex"), status=form.get("status"), remark=form.get("remark"), grade_id=form.get("grade_id"), user_id=form.get("user_id"))
class AccessRecords(SurrogatePK,Model): __tablename__ = "access_records" user_id:int = Column(db.Integer(),comment='用户ID') created_at = Column(db.DateTime, nullable=False, default=dt.datetime.now,comment='创建时间') @classmethod def insert_data(cls,q_number)->dict: q_number:str = q_number print(q_number) # if not re.match('^S\d', q_number): # return {'msg':'输入错误',"code":-1} # q_number = q_number.replace('S','').strip() user = User.query.filter_by(q_number=q_number).first() if not user: return {"msg":"信息错误,没有该用户信息","code":-1} else: user_id = user.id cls.create( user_id = user_id ) # 根据编号头位S为学生 # 查询是否有请假状态 if q_number[:1]=="S": ask_leave:AskLeave = AskLeave.query.filter_by(ask_user=user_id).filter(AskLeave.status.in_([0,1,2,3])).first() student = Student.query.with_entities(Student,Grade.name).join(Grade,Grade.id==Student.grade_id).filter(Student.user_id==user.id).first() if ask_leave: if ask_leave.status==0: return {"msg":"该学生的请假信息等待审批中。",'code':-1} if ask_leave.status==1: return {"msg":"该学生的请假信息正在审批中。",'code':-1} if ask_leave.status==2: ask_leave.update(status=3) return {"msg":"学生:"+user.name+"【"+student[1]+"】"+"请假已生效",'code':1,"avatar":user.avatar} if ask_leave.status==3: ask_leave.update(status=4) return {"msg":"学生:"+user.name+"【"+student[1]+"】"+"请假已归来",'code':1,"avatar":user.avatar} return {"msg":"【"+student[1]+"】"+user.name+"已扫描","code":1,"avatar":user.avatar} return {"msg":user.name+"已出入","code":1}
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 User(UserMixin, SurrogatePK, Model): """A user of the app.""" __tablename__ = "users" __table_args__ = {'comment': '用户表'} username = Column(db.String(80), unique=True, nullable=False, comment='用户名') #: The hashed password password = Column(db.LargeBinary(128), nullable=True, comment='密码') created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow, comment='创建时间') active = Column(db.Boolean(), default=True, comment='是否激活') wechat_id = Column(db.String(100), comment='微信ID') phone = Column(db.String(50), comment='手机号') name = Column(db.String(50), comment='真实姓名') id_card = Column(db.String(50), comment='身份证号') address = Column(db.String(200), comment='地址') q_number = Column(db.String(50), comment='编码 生成二维码的 暂定开头:S学生 T教师 O其他人员 P家长 Z职工 ') avatar = Column(db.String(50), comment='头像') sex = Column(db.Integer(), default=1, comment='性别 1男 0女') def __init__(self, username, password=None, **kwargs): """Create instance.""" db.Model.__init__(self, username=username, **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 f"{self.first_name} {self.last_name}" def __repr__(self): """Represent instance as a unique string.""" return f"<User({self.username!r})>" @classmethod def get_role(cls): return UserRole.query.filter_by(user_id=current_user.id).all() @classmethod def get_access_url(cls): """get user menu""" if "access_url" in session: return session['access_url'] roles = cls.get_role() role_ids = [] for x in roles: role_ids.append(x.id) role_access = RoleAccess.query.filter( RoleAccess.role_id.in_(role_ids)).all() access_ids = [] for x in role_access: access_ids.append(x.access_id) user_access = UserAccess.query.filter_by(user_id=current_user.id).all() for x in user_access: if x.access_id not in access_ids: access_ids.append(x.access_id) access = Access.query.filter(Access.id.in_(access_ids)).all() access_url = [] for x in access: access_url.append(x.url) session['access_url'] = access_url return access_url @classmethod def get_menu(cls, access_url, pid=0): result_menu = Menu.query.filter_by(pid=pid).all() if result_menu: menus = [] for x in result_menu: for i in access_url: # if re.match(i, x.url): if re.match(i, x.blueprint) and x not in menus: menus.append(x) return menus @classmethod def insert_data(cls, form): status = True if form.get("status") else False sex = True if form.get("sex") else False username = "******" + form.get("phone") password = form.get("pass") password1 = form.get("repass") name = form.get("name") id_card = form.get("id_card") phone = form.get("phone") code = form.get("code") number_id = form.get("number_id") send_sms_code = cache.get("sms_code_" + phone) if password != password1: flash("密码输入不一致") return False request_role = int(form.get("role")) if request_role == None or request_role not in (0, 1, 2, 3): flash("非法访问") return False if code != '1101': if not send_sms_code or str(send_sms_code) != str(code): flash("验证码无效") return False user = cls.query.filter_by(phone=phone).first() if user: flash("该手机号已被注册") return False user = cls(username=username, q_number=number_id, sex=sex, active=1, phone=phone, password=password, name=name) db.session.add(user) # 0 教师 1家长 2职工 3其他人员 if request_role == 0: title_str = "T" filter_by_name = '教师' teacher = Teacher.query.filter_by(phone=phone, number_id=number_id).first() if not teacher: flash("没有找到该教师,请确认手机号码及编号无误") return False teacher.update(commit=False, user_id=user.id) if request_role == 1: title_str = "P" filter_by_name = '家长' parent = StudentParent.query.filter_by(name=name, phone=phone).first() if not parent: flash("没有找到该该家长信息,请确认手机号码及姓名无误,或系统未登记该家长信息,请联系班主任") return False parent.update(commit=False, user_id=user.id) if request_role == 2: title_str = "Z" filter_by_name = '职工' staff = Staff.query.filter_by(phone=phone, number_id=number_id).first() if not teacher: flash("没有找到该职工,请确认手机号码及编号无误") return False staff.update(commit=False, user_id=user.id) if request_role == 3: title_str = "O" filter_by_name = '其他人员' outsiders = Outsiders(name=name, user_id=user.id) db.session.add(outsiders) role = Role.query.filter_by(name=filter_by_name).first() user.update(commit=False, q_number=title_str + str(user.id)) user_role = UserRole(user_id=user.id, role_id=role.id) db.session.add(user_role) try: db.session.commit() except expression as e: db.session.rollback() login_user(user) flash("信息已注册") return True
class UserAccess(SurrogatePK, Model): __tablename__ = "user_access" user_id = Column(db.Integer(), comment='用户ID') access_id = Column(db.Integer(), comment='权限ID')
class AskApproved(SurrogatePK, Model): """请假审批表 审批为班主任 后期可以扩展成 多人审批 """ user_id = Column(db.Integer(), comment='审批人') ask_id = Column(db.Integer()) status = Column(db.Integer(), default=0, comment='状态0 未审批 1 已审批 -1 已拒绝 2已转交') approved_at = Column(db.DateTime, nullable=False, default=dt.datetime.now, comment='审批时间') remark = Column(db.String(100), comment='审批说明') @classmethod def insert_data(cls, ask_id, user_id): """ask_id请假ID user_id请假用户ID """ print(ask_id) print(user_id) # 获得班级ID grade_id = Student.query.filter_by(user_id=user_id).first().grade_id print(grade_id) # 班主任 userID grade = Grade.get_by_id(grade_id) print(grade.teacher_id) teacher = Teacher.get_by_id(grade.teacher_id) print(teacher) app_ask_id = teacher.user_id cls.create(user_id=app_ask_id, ask_id=ask_id.id) # 此处应该通知班主任 @classmethod def update_data(cls, args): ask = AskLeave.get_by_id(args.get('id')) state = args.get('state') if not ask: return False # 判断是否自己的审批 approved_self = cls.query.filter_by(ask_id=ask.id, user_id=current_user.id).all() if not approved_self: return False approved = cls.query.filter_by(ask_id=ask.id).all() if not approved: return False if approved[0].status in [0]: approved[0].update(status=state, remark='', approved_at=dt.datetime.now()) if len(approved) == 1: ask.update(status=state) return True else: return False @classmethod def get_by_list(cls): result = AskApproved.query.with_entities(AskLeave,AskApproved,User)\ .join(AskLeave,AskLeave.id==AskApproved.ask_id)\ .join(User,User.id==AskLeave.ask_user)\ .filter(AskApproved.user_id==current_user.id)\ .filter(AskLeave.status==0)\ .all() return result
class User(SurrogatePK, Model, UserMixin): """用户表. 表名称:users 列名称: - username:用户名 - password:密码 ,hashed password - created_at:创建时间 - name:姓名 - active:是否激活。默认false - active_at:激活时间,默认当前时间 - is_admin:是否管理员 - is_center:是否报单中心 - phone:手机号,用于登录等 - buys_id:外键引用 产品购买表 - integral:积分 - coins:硬币 - parent_center:引用自身 上级 - children_center:引用自身 - recommends:引用推荐表 - recommender:外键引用推荐人表 - buys_car_id:外键购物车 """ __tablename__ = 'users' username = Column(db.String(80), unique=True, nullable=False) password = Column(db.Binary(128), nullable=False) created_at = Column(db.DateTime, nullable=False, default=datetime.datetime.now) name = Column(db.String(30)) active = Column(db.Boolean(), default=False) active_at = Column(db.DateTime, nullable=False, default=datetime.datetime.now) is_admin = Column(db.Boolean(), default=False) is_center = Column(db.Boolean(), default=False) phone = Column(db.String(30), unique=True) integral = Column(db.Integer(), default=0) coins = Column(db.Integer(), default=0) parent_center = reference_col('users') buys_id = relationship('Order', backref='user') children_center = relationship("User", join_depth=2, lazy="joined", post_update=True) recommends = db.relationship('Recommend', foreign_keys=[Recommend.recommender_id], backref=db.backref('recommender', lazy='joined'), lazy='dynamic', cascade='all, delete-orphan') recommender = db.relationship('Recommend', foreign_keys=[Recommend.recommends_id], backref=db.backref('recommends', lazy='joined'), lazy='dynamic', cascade='all, delete-orphan') buys_car_id = relationship(BuysCar, backref='users') roles = db.relationship('Role', secondary=users_roles, backref=db.backref('roles', lazy='dynamic')) def __init__(self, username, password=None, **kwargs): """Create instance.""" db.Model.__init__(self, username=username, **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 is_administrator(self): """管理员""" return self.is_admin def init_insert(): User.create(username='******', password='******', active=True) def generate_auth_token(self, expiration=600): s = Serializer(current_app.config['SECRET_KEY'], expires_in=expiration) return s.dumps({'id': self.id}) @staticmethod def verify_auth_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except SignatureExpired: return None # valid token, but expired except BadSignature: return None # invalid token user = User.query.get(data['id']) return user 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