class User(UserMixin, db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True, autoincrement=True) email = db.Column(db.String(64), nullable=False, unique=True) username = db.Column(db.String(32), nullable=False, unique=True) password_hash = db.Column(db.String(128)) register_time = db.Column(db.DateTime, default=datetime.now) # confirmed = db.Column(db.Boolean, default=False) deleted = db.Column(db.Boolean, default=False) icon = db.Column(db.LargeBinary(65536), default=False) # content = db.relationship('Content', backref='user') contents = db.relationship('Content', backref='user', secondary='ucpc') pictures = db.relationship('Picture', backref='user', secondary='ucpc') comments = db.relationship('Comment', backref='user', secondary='ucpc') # followed = db.relationship('Follow', # foreign_keys=[Follow.follower_id], # backref=db.backref('follower', lazy='joined'), # lazy='dynamic', # cascade='all, delete-orphan') # followers = db.relationship('Follow', # foreign_keys=[Follow.followed_id], # backref=db.backref('followed', lazy='joined'), # lazy='dynamic', # cascade='all, delete-orphan') 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 Picture(db.Model): __tablename__ = 'picture' id = db.Column(db.Integer, primary_key=True, autoincrement=True) picture_name = db.Column(db.String(128), unique=True, nullable=False) picture_datetime = db.Column(db.DateTime, default=datetime.now) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) picture_binary = db.Column(db.LargeBinary(16777216)) users = db.relationship('User', backref='picture', secondary='ucpc') contents = db.relationship('Content', backref='picture', secondary='ucpc') comments = db.relationship('Comment', backref='picture', secondary='ucpc')
class PcapUDPStream(db.Model): __tablename__ = 'pcap_udpstream' sid = db.Column(db.Integer, primary_key=True, autoincrement=True, index=True) pid = db.Column(db.Integer) sindex = db.Column(db.Integer) raw = db.Column(db.LargeBinary(1500)) def __init__(self, raw): self.raw = raw
class User(UserMixin, mysql_db.Model): __tablename__ = 'users' id = mysql_db.Column(mysql_db.Integer, primary_key=True) username = mysql_db.Column(mysql_db.String(64), unique=True, index=True) password = mysql_db.Column(mysql_db.String(256)) login_count = mysql_db.Column(mysql_db.Integer, default=0) last_login_ip = mysql_db.Column(mysql_db.String(32), default='unknown') pic = mysql_db.Column(mysql_db.LargeBinary()) nickname = mysql_db.Column(mysql_db.String(64)) # 不能读取 @property def pwd(self): raise Exception("you cant read it") @pwd.setter def pwd(self, password): self.password = generate_password_hash(password) def check_password_hash(self, password): return check_password_hash(self.password, password) def is_authenticated(self): return True def is_anonymous(self): return False def is_active(self): return True def get_id(self): return str(self.id) def is_admin(self): return self.username == 'admin'
class PcapRes(db.Model): __tablename__ = 'pcap_result' rid = db.Column(db.Integer, primary_key=True, autoincrement=True, index=True) pid = db.Column(db.Integer) raw = db.Column(db.LargeBinary(1500)) def __init__(self, pid, raw): self.pid = pid self.raw = raw def __repr__(self): return '[{}]-{} {}'.format(self.rid, self.pid, loads(self.raw)) def __str__(self): return '[{}]-{} {}'.format(self.rid, self.pid, self._layer2str(loads(self.raw))) def _layer2str(self, layer=None): layer_str = '' if hasattr(layer, 'fields'): layer_str += '<br/><' + layer.name + ' ' for i in layer.fields: layer_str += i + '="' + escape(str(layer.fields[i])) + '" ' layer_str += '>' if hasattr(layer, 'payload'): if layer.payload.name == 'NoPayload': return layer_str layer_str += self._layer2str(layer=layer.payload) return layer_str def _layer2dict(self, layer=None, filter=None): layer_dict = {} if hasattr(layer, 'fields'): for i in layer.fields: layer_dict[layer.name + '.' + i] = escape(str(layer.fields[i])) if hasattr(layer, 'payload'): if layer.payload.name == 'NoPayload': return layer_dict layer_dict = dict(layer_dict, **self._layer2dict(layer=layer.payload)) return layer_dict def add(self): db.session.add(self) db.session.commit() def tableformat(self, layer=None, filter=None): thead = '<tr>' tbody = '<tr>' layer_dict = self._layer2dict(layer=layer, filter=filter) for k in layer_dict: thead += '<th title="' + k.split('.')[0] + '">' + k.split( '.')[1] + '</th>' tbody += '<td>' + layer_dict[k] + '</td>' thead += '</tr>' tbody += '</tr>' return (thead, tbody)