class Menu(db.Model): __tablename__ = 'menus' id = db.Column(db.Integer, primary_key=True) exclude_columns = ['created_at', 'updated_at'] auth_name = Column(db.String(32), nullable=False, index=True) path = Column(db.String(256), nullable=False) level = Column(db.Integer, nullable=True) created_at = Column(db.Date, nullable=True, default=datetime.now) updated_at = Column(db.Date, nullable=True, default=datetime.now) parent_id = db.Column(db.Integer, db.ForeignKey('menus.id')) children = db.relationship('Menu', back_populates='parent') parent = db.relationship('Menu', back_populates='children', remote_side=[id]) # role_id = Column(db.Integer, db.ForeignKey('roles.id')) # role = relationship('Role', backref=db.backref('menus', order_by=id)) # roles = relationship('Role', secondary=association_table, back_populates="menus") # 将back_populates修改为db.backref() 指定 lazy = 'dynamic' 参数,关系两侧返回的查询都可接受额外的过滤器 roles = relationship('Role', secondary=association_table, backref=db.backref("menus", lazy='dynamic')) def __init__(self, auth_name, path, **kwargs): db.Model.__init__(self, auth_name=auth_name, path=path, **kwargs)
class User(db.Model): __tablename__ = 'users' id = db.Column(db.String(64), primary_key=True, default=generate_uuid(), nullable=False, unique=True) email = db.Column(db.String(256), unique=True, nullable=False) password = db.Column(db.String(256), nullable=False) created_on = db.Column(db.DateTime, default=datetime.datetime.utcnow) @classmethod def encode_auth_token(cls, user_id): payload = dict(exp=datetime.datetime.utcnow() + datetime.timedelta(seconds=5), iat=datetime.datetime.utcnow(), sub=user_id) return jwt.encode(payload, config.SECRET_KEY, algorithm='HS256') @classmethod def decode_auth_token(cls, auth_token): try: payload = jwt.decode(auth_token, config.SECRET_KEY, algorithms=['HS256']) return payload['sub'] except jwt.ExpiredSignature: return "Signature expired. Please log in again" except jwt.InvalidTokenError: return "Invalid token. Please log in again"
class ProtestSubmission(db.Model): __tablename__ = "protestsubmission" id = db.Column(db.Integer, primary_key=True, autoincrement=True) protest_id = db.Column(db.Integer, db.ForeignKey("protest.id")) address = db.Column(db.String(200)) # lat and lng are hidden to the user on the ui lat = db.Column(db.Float(7)) lng = db.Column(db.Float(7)) description = db.Column(db.String(120)) size = db.Column(db.String(120)) issue_locality = db.Column(db.String(120)) issue_type = db.Column(db.String(120)) timestamp = db.Column(db.DateTime, default=datetime.datetime.utcnow) def to_json(self): return { 'id': self.id, 'protest_id': self.protest_id, 'address': self.address, 'lat': self.lat, 'lng': self.lng, 'description': self.description, 'size': self.size, 'issue_locality': self.issue_locality, 'issue_type': self.issue_type.split(',') if self.issue_type else [] }
class Question(db.Model): id = db.Column(db.String(64), primary_key=True, default=generate_uuid) text = db.Column(db.String(1000), nullable=False) date_created = db.Column(db.DateTime, default=datetime.utcnow()) def __str__(self): return self.text
class Envip(db.Model): __tablename__ = 'envip' id = db.Column(db.Integer, primary_key=True, autoincrement=True) ip_name = db.Column(db.String(255), nullable=False) ip_type = db.Column(db.String(50), nullable=False) def __repr__(self): return 'ip_name:%s ip_type:%s' % self.ip_name, self.ip_type
class Group(db.Model): __tablename__ = 'group' id = db.Column(db.Integer, primary_key=True, autoincrement=True) group_name = db.Column(db.String(50), nullable=False) project_id = db.Column(db.String(255), nullable=False) def __repr__(self): return 'group_name:%s' % self.group_name
class User(db.Model): #用户表 id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(100), unique=True) password = db.Column(db.String(256), nullable=False) # 定义wai建 article_id = db.Column(db.Integer, db.ForeignKey('article.id'), nullable=True)
class Photo(db.Model): __tablename__ = 'photos' id = db.Column(db.Integer, primary_key=True) photo_name = Column(db.String(500), nullable=False, index=True) # photo_url = Column(db.Url(), nullable=False, index=True) photo_url = Column(db.String(500), nullable=False, index=True) good_id = Column(db.Integer, db.ForeignKey('goods.id')) good = relationship('Good', back_populates='photos')
class Permission(db.Model): __tablename__ = 'm_permission' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(255), nullable=True) parent_id = db.Column(db.Integer, nullable=True) endpoint = db.Column(db.String(255), nullable=True) # manager = db.relationship('Manager',backref='m_permission',uselist=False) # manager_id = db.Column(db.Integer,db.ForeignKey('m_manager.id'))
class Role(db.Model): __tablename__ = 'roles' id = Column(db.Integer, primary_key=True) # exclude_columns = ['created_at', 'updated_at'] role_name = Column(db.String(32), nullable=False, index=True) role_desc = Column(db.String(256), nullable=True, index=False) created_at = Column(db.Date, nullable=True, default=datetime.now) updated_at = Column(db.Date, nullable=True, default=datetime.now) # menus = relationship('Menu', secondary=association_table, back_populates="roles") def __init__(self, role_name, role_desc, **kwargs): db.Model.__init__(self, role_name=role_name, role_desc=role_desc, **kwargs) @property def role_menus(self): # TODO 优化角色对应权限的筛选逻辑 menus = [] menus_1 = self.menus.filter_by(level=0).all() # logging.error(menus_1) for menu_1 in menus_1: # menu_1 = copy.deepcopy(menu_1_o) item_1 = {} children_1 = [] # logging.error((menu_1.children, self.menus.all())) for menu_2 in menu_1.children: # menu_2 = copy.deepcopy(menu_2_o) item_2 = {} children_2 = [] if menu_2 in self.menus.all(): # children_1.append(menu_2) for menu_3 in menu_2.children: if menu_3 in self.menus.all(): children_2.append(menu_3) item_2 = { 'children': children_2, 'auth_name': menu_2.auth_name, 'created_at': menu_2.created_at, 'id': menu_2.id, 'level': menu_2.level, 'path': menu_2.path, 'updated_at': menu_2.updated_at } children_1.append(item_2) item_1 = { 'children': children_1, 'auth_name': menu_1.auth_name, 'created_at': menu_1.created_at, 'id': menu_1.id, 'level': menu_1.level, 'path': menu_1.path, 'updated_at': menu_1.updated_at } menus.append(item_1) return menus
class ReportLog(db.Model): __tablename__ = 'report_log' id = db.Column(db.Integer, primary_key=True, autoincrement=True) tree_id = db.Column(db.Integer, nullable=False) tree_name = db.Column(db.String(255), nullable=False) report_name = db.Column(db.String(255), nullable=False) report_info = db.Column(db.String(50000), nullable=False) uid = db.Column(db.Integer, nullable=False) create_time = db.Column(db.DateTime, default=datetime.now)
class Preview(db.Model): __tablename__ = "preview" id = db.Column(db.Integer, primary_key=True) # 编号 title = db.Column(db.String(255), unique=True) # 标题 logo = db.Column(db.String(255), unique=True) # 封面 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __repr__(self): return "<Preview %r>" % self.title
class Auth(db.Model): __tablename__ = "auth" id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 名称 url = db.Column(db.String(255), unique=True) # 地址 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __repr__(self): return "<Auth %r>" % self.name
class Language(db.Model): __tablename__ = 'm_language' id = db.Column(db.Integer, primary_key=True, autoincrement=True) description = db.Column(db.String(255), nullable=True) name = db.Column(db.String(255), nullable=True) shortName = db.Column(db.String(255), nullable=True) createtime = db.Column(db.DateTime, default=datetime.now) # manager_id = db.Column(db.Integer,db.ForeignKey('m_manager.id')) entry = db.relationship('Entry', backref='m_language', uselist=False)
class Function(db.Model): __tablename__ = 'function' id = db.Column(db.Integer, primary_key=True, autoincrement=True) func_name = db.Column(db.String(50), nullable=False) port_name = db.Column(db.String(255), nullable=False) request_type = db.Column(db.String(255), nullable=False) def __repr__(self): return 'func_id:%s func_name:%s port_name:%s request_type:%s' % self.id, self.func_name, self.port_name, self.request_type
class Entry(db.Model): __tablename__ = 'm_entry' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(255), nullable=True) description = db.Column(db.String(255), nullable=True) createtime = db.Column(db.DateTime, default=datetime.now) result = db.Column(db.String(255), nullable=True, default="") project_id = db.Column(db.Integer, db.ForeignKey('m_project.id')) language_id = db.Column(db.Integer, db.ForeignKey('m_language.id'))
class Timingtask(db.Model): __tablename__ = 'timingtask' # 定义该表在mysql数据库中的实际名称 # 定义表的内容 id = db.Column(db.Integer, primary_key=True) treename = db.Column(db.String(255), nullable=False) pointtime = db.Column(db.String(255), nullable=False) username = db.Column(db.String(255), nullable=False) taskid = db.Column(db.String(255), nullable=False) tasktype = db.Column(db.String(255), nullable=False)
class Role(db.Model): __tablename__ = "role" id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 名称 auths = db.Column(db.String(600)) # 权限列表 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 def __repr__(self): return "<Role %r>" % self.name
class Role(db.Model): __tablename__ = "role" id = db.Column(db.Integer, primary_key=True) # 编号 name = db.Column(db.String(100), unique=True) # 名称 auths = db.Column(db.String(600)) # 角色权限列表 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 添加时间 admins = db.relationship("Admin", backref='role') # 管理员外键关系关联 def __repr__(self): return "<Role %r>" % self.name
class User(db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True) username = db.Column(db.String(80), unique=True, nullable=False) password = db.Column(db.String(128)) def check_password(self, password): return check_password_hash(self.password, password)
class Oplog(db.Model): __tablename__ = "oplog" id = db.Column(db.Integer, primary_key=True) # 编号 admin_id = db.Column(db.Integer, db.ForeignKey('admin.id')) # 所属管理员 ip = db.Column(db.String(100)) # 登录IP reason = db.Column(db.String(600)) # 操作原因 addtime = db.Column(db.DateTime, index=True, default=datetime.now) # 登录时间 def __repr__(self): return "<Oplog %r>" % self.id
class Brainmap(db.Model): __tablename__ = 'brainmap' # 定义该表在mysql数据库中的实际名称 # 定义表的内容 id = db.Column(db.Integer, primary_key=True) pid = db.Column(db.Integer, nullable=False) brainmapname = db.Column(db.String(10000), nullable=False) rdstatus = db.Column(db.String(50), nullable=False) qastatus = db.Column(db.String(50), nullable=False) uid = db.Column(db.Integer, nullable=False) tree_id = db.Column(db.Integer, nullable=False)
class Project(db.Model): __tablename__ = 'm_project' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(255),nullable = True) description = db.Column(db.String(255),nullable = True) secretId = db.Column(db.String(255),nullable=True,unique=True) createtime = db.Column(db.DateTime, default=datetime.now) # manager_id = db.Column(db.Integer,db.ForeignKey('m_manager.id')) entry = db.relationship('Entry', backref='m_project',uselist=False) entryPendingAmount = db.Column(db.String(255),nullable=True) language = db.relationship('Language',secondary='project_language',backref='m_project')
class OperationLog(db.Model): __tablename__ = 'operation_log' id = db.Column(db.Integer, primary_key=True, autoincrement=True) uid = db.Column(db.Integer, nullable=False) name = db.Column(db.String(255), nullable=False) username = db.Column(db.String(255), nullable=False) project_type = db.Column(db.Integer, nullable=False) tree_id = db.Column(db.Integer, nullable=False) operation_content = db.Column(db.String(5000), nullable=False) operation_result = db.Column(db.Integer, nullable=False) create_time = db.Column(db.DateTime, default=datetime.now)
class User(UserMixin, db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True, nullable=False) username = db.Column(db.String(50), nullable=False, unique=True) password_hash = db.Column(db.String(128)) email = db.Column(db.String(128), nullable=False, unique=True) confirmed = db.Column(db.Boolean, default=False) icon = db.Column(db.String(64), default='default.jpg') # lazy 在这里是懒加载 dynamic表示不加载数据但是提供查询 # 如果一对一的关系 需要加上 uselist=Flase posts = db.relationship("Posts", backref="user", lazy="dynamic") # 当前用户通过 user 访问 posts 表中的字段 # 密码不能读 而且永不返回 @property def password(self): raise AttributeError("密码不可读的帅哥") # 设置密码的时候 保存的是加密后的hash值 @password.setter def password(self, password): self.password_hash = generate_password_hash(password) # 校验密码是否正确 正确 true 错误 false # 先加密 再跟数据库比较 def verify_password(self, password): return check_password_hash(self.password_hash, password) # 生成token 通过邮箱发送给用户 def generate_active_token(self, expires_in=3600): s = Serializer(current_app.config['SECRET_KEY'], expires_in=expires_in) return s.dumps({'id': self.id}) # 验证token 方法 @staticmethod def check_active_token(token): s = Serializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return False # 这个id是从 token中解析出来的 然后根据id 到数据库中查找 对应的数据进行更新 u = User.query.get(data.get('id')) if not u: flash("该用户不存在") return False if not u.confirmed: u.confirmed = True db.session.add(u) return True
class Send(db.Model): __tablename__ = 'send' id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True) OrderId = db.Column(db.Integer, db.ForeignKey('order.id')) ProductName = db.Column(db.String(30)) SendName = db.Column(db.String(30)) SendDate = db.Column(db.Date) SendPhone = db.Column(db.String(30)) SendAddress = db.Column(db.String(100))
class Serve(db.Model): __tablename__ = 'serve' id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True) ServeId = db.Column(db.String(30)) CustomId = db.Column(db.Integer, db.ForeignKey('custom.id'), nullable=False) ServeDate = db.Column(db.Date) ServeInfo = db.Column(db.String(100))
class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String(50), nullable=False) username = db.Column(db.String(64), unique=True, index=True) password = db.Column(db.Text) role = db.Column(db.Integer, nullable=False) posts = db.relationship('Post', backref='users') trees = db.relationship('Tree', backref='users') def __repr__(self): return 'User:%s' % self.username
class MonitorResult(db.Model): __tablename__ = 'monitor_result' id = db.Column(db.Integer, primary_key=True, autoincrement=True) one_node = db.Column(db.Integer, nullable=False) two_node = db.Column(db.Integer, nullable=False) three_node = db.Column(db.Integer, nullable=False) four_node = db.Column(db.Integer, nullable=False) service_name = db.Column(db.String(255), nullable=False) service_ip = db.Column(db.String(255), nullable=False) result_details = db.Column(db.Text, nullable=False) run_result = db.Column(db.Integer, nullable=False) is_new = db.Column(db.Integer, nullable=False) create_time = db.Column(db.DateTime, default=datetime.now)
class Admin(db.Model): __tablename__ = 'admin' id = db.Column(db.Integer, primary_key=True, nullable=False, autoincrement=True) username = db.Column(db.String(30), nullable=False) password = db.Column(db.String(30), nullable=False) def check_pwd(self, pwd): if self.password == pwd: return True else: return False