Exemplo n.º 1
0
class User(db.Model):
    id_num = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(100), unique=True, index=True, nullable=False)
    password = db.Column(db.String(30), nullable=False)
    admin = db.Column(db.Boolean, nullable=False)
    sensors = db.relationship("Sensor", back_populates="user")

    # Password security management
    @property
    def plain_password(self):
        raise AttributeError(
            "The password can not be obtained. It is prohibited.")
        # We won't obtain the password accessing with a get method

    @plain_password.setter
    def plain_password(self, password):
        self.password = generate_password_hash(password)
        # We encrypt the plain text password from the JSON received in the user registration

    def validate_password(self, password):
        return check_password_hash(self.password, password)
        # Compares the received password with the database password

    # User object representation
    def __repr__(self):
        return f'<User: {self.id_num} {self.email} >'
Exemplo n.º 2
0
class Layer(db.Model):
    __tablename__ = 'layer'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(128))#图层名称
    uid=db.Column(db.String(128))#唯一值
    lines=db.relationship('Line')
    points=db.relationship('Point')
    create_user=db.Column(db.String(56))#创建用户名称
    create_time=db.Column(db.DateTime)
    roles=db.relationship('Role',secondary=roles_layers,back_populates='layers')#可查看该服务的用户角色
    #获取所有的要素
    def getFeatures(self):
        feas=[]
        feas.extend(self.points)
        feas.extend(self.lines)
        return feas
    #将图层对象转化成geojson
    def toGeoJson(self):
        features=[]
        for line in lines:
            feature=line.toGeoJson()
            features.append(feature)
        for pt in points:
            feature=pt.toGeoJson()
            features.append(feature)
        featureCollection={
            "type":"FeatureCollection",
            "features":features
        }
        return json.dumps(featureCollection)
Exemplo n.º 3
0
class Message(db.Model):
    __tablename__ = 'messages'

    id = db.Column(db.Integer, primary_key=True)
    body = db.Column(db.Text, nullable=False)
    timestamp = db.Column(db.DateTime, default=datetime.utcnow())
    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    room_id = db.Column(db.Integer, db.ForeignKey('rooms.id'))
Exemplo n.º 4
0
class _File(db.Model):#文件模型
    id=db.Column(db.Integer,primary_key=True)
    describertion=db.Column(db.String(100))#文件描述
    time=db.Column(db.DateTime)
    uid=db.Column(db.String(60))#唯一值
    path=db.Column(db.String(100))#存放路径
    def __init__(self):
        self.uid=uuid.uuid4()
Exemplo n.º 5
0
class Admin(db.Model,UserMixin):#用户模型(管理员权限)
    id=db.Column(db.Integer,primary_key=True)
    username=db.Column(db.String(20))#用户名
    password_hash=db.Column(db.String(128))#密码
    name=db.Column(db.String(100))#用户名称
    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def validate_password(self, password):
        print([self.password_hash,password])
        return check_password_hash(self.password_hash, password)
Exemplo n.º 6
0
class UnitModel(db.Model):
    """The word model."""
    __tablename__ = 'unit'
    id = db.Column(db.Integer, primary_key=True)
    value = db.Column(db.String(16))

    def __init__(self, value):
        self.value = value

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()
Exemplo n.º 7
0
class User(UserMixin, db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(254), unique=True, nullable=False)
    nickname = db.Column(db.String(30), unique=True, nullable=False)
    password_hash = db.Column(db.String(128))
    email_hash = db.Column(db.String(128))
    messages = db.relationship('Message', backref='user')
    room_id = db.Column(db.Integer, db.ForeignKey('rooms.id'))
    register = db.Column(db.DateTime, default=datetime.utcnow())
    lastroom = db.Column(db.String(128))

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        self.generate_email_hash()

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def verify_password(self, password):
        return check_password_hash(self.password_hash, password)

    def generate_email_hash(self):
        if self.email is not None and self.email_hash is None:
            self.email_hash = hashlib.md5(self.email.encode(
                'utf-8')).hexdigest()  # encode for py23 compatible

    @property
    def gravatar(self):
        return 'https://gravatar.com/avatar/%s?d=robohash' % self.email_hash
Exemplo n.º 8
0
class UserModel(db.Model, TimestampMixin):
    """The user model"""

    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), unique=True)
    password = db.Column(db.CHAR(64))  # length of SHA-256 hash value

    results = db.relationship('ResultModel')

    def __init__(self, username, password):
        self.username = username
        self.password = hashing.hash_value(password)

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()
Exemplo n.º 9
0
class ImgServer(db.Model):
    __tablename__ = 'img'
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(128))#服务别名
    url=db.Column(db.String(556))#服务地址(wms或其他)
    wmtsUrl=db.Column(db.String(556))#服务地址(wmts)
    tmsUrl=db.Column(db.String(556))#服务地址(tms)
    create_user=db.Column(db.String(56))#创建用户名称
    create_time=db.Column(db.DateTime,default=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
    roles=db.relationship('Role',secondary=roles_imgs,back_populates='imgServers')#可查看该服务的用户角色\
    bounds=db.Column(db.String(256))#范围,经度纬度之间用,隔开,点之间用空格隔开
Exemplo n.º 10
0
class GeoBase():
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(128))
    create_user=db.Column(db.String(128))
    style=db.Column(db.String(1024))#矢量样式
    uid=db.Column(db.String(128))#图层唯一值id
    create_time=db.Column(db.DateTime)
    isDel=db.Column(db.Integer,default=1)#是否删除 1未删除,0删除
Exemplo n.º 11
0
class Word(db.Model):
    __tablename__ = 'words'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128), unique=True, nullable=False)
    category = db.Column(db.String(128), default='Other')


# @event.listens_for(Room, 'before_insert')
# def receive_before_insert(mapper, connection, target):
#     print('before_insert:',mapper, connection, target)
#     print(target.users)
#
#
# @event.listens_for(Room, 'before_update')
# def receive_before_update(mapper, connection, target):
#     "listen for the 'before_update' event"
#     print('before_update:',mapper, connection, target)
#
#     print(target.users)
#
#
#
# @event.listens_for(Room.users, 'append',)
# def receive_append2(target,value, initiator):
#     print("房间增加用户:",target,value, initiator)

# class ListRoomMerber(object):
#     def __init__(self):
#         self.data = []
#     def append(self,item):
#         if len(self.data) < 2:
#             self.data.append(item)
#         else:
#             raise Exception("Out of space")
#     def remove(self,item):
#         self.data.remove(item)
#
#     def extend(self, items):
#         self.data.extend(items)
#
#     def __iter__(self):
#         return iter(self.data)
Exemplo n.º 12
0
class Line(GeoBase,db.Model):
    geo=db.Column(Geometry('LINESTRING'))
    roles=db.relationship('Role',secondary=roles_lines,back_populates='lines')#可查看该服务的用户角色
    layer_id=db.Column(db.Integer,db.ForeignKey('layer.id'))
    def __init__(self, *args, **kwargs):
        super(Line, self).__init__(*args, **kwargs)
        self.uid=uuid.uuid4()
        self.create_time=datetime.datetime.now()
        self.create_user=current_user.name
    def getFields(self):
        return ['name','create_user','style','uid','create_time']
    def hasField(self,field):#判断是否含有该字段
        return field in self.getFields()
    def __getitem__(self,k):
        if(k=='name'):
            return self.name
        if(k=='create_user'):
            return self.create_user
        if(k=='style'):
            return self.style
        if(k=='uid'):
            return self.uid
        if(k=='create_time'):
            return self.create_time
    def setProperties(self,properties):#快速设置属性
        keys=properties.keys()
        for key in keys:
            if(self.hasField(key)):
                self[key]=properties[key]
        return self
    def toGeoJson(self):
        geojson=db.session.execute(self.geo.ST_AsGeoJSON()).scalar()
        feature={
            "type": "Feature",
            "geometry": json.loads(geojson),
            "properties": {
            }
        }
        fields=self.getFields()
        for field in fields:
            feature["properties"][field]=str(self[field])
        return feature
Exemplo n.º 13
0
class Room(db.Model):
    __tablename__ = 'rooms'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), unique=True, nullable=False)
    password = db.Column(db.String(128))
    leader = db.Column(db.String(30), default='Fanco')
    users = db.relationship('User', backref='room')
    messages = db.relationship('Message', backref='room', cascade='all')

    def set_leader(self, name):
        self.leader = name
        return self.leader

    @validates('users')
    def validate_users_size(self, key, target):
        # print("validates:",self,key, target)
        # print("The room's members:",self.users)
        assert len(self.users) <= 5
        return target
Exemplo n.º 14
0
class SecondMenu(db.Model):
    __tablename__ = 'secondmenu'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    icon = db.Column(db.String(50))
    url = db.Column(db.String(250))
    order = db.Column(db.SmallInteger, default=0)
    menu_id=db.Column(db.Integer,db.ForeignKey('menu.id'))
Exemplo n.º 15
0
class Menu(db.Model):
    __tablename__ = 'menu'
    id = db.Column(db.Integer, primary_key=True)
    code=db.Column(db.String(50))#代号
    name = db.Column(db.String(50))
    icon = db.Column(db.String(50))
    url = db.Column(db.String(250))
    order = db.Column(db.SmallInteger, default=0)
    roles=db.relationship('Role',secondary=roles_menus,back_populates='menus')#多对多关系建立之后要在下级的class中声明该字段
    secondmenus=db.relationship('SecondMenu',cascade='all')#一对多
    def __str__(self):
        return self.name
Exemplo n.º 16
0
class Seism(db.Model):
    id_num = db.Column(db.Integer, primary_key=True)
    datetime = db.Column(db.DateTime, nullable=False)
    depth = db.Column(db.Integer, nullable=False)
    magnitude = db.Column(db.Float, nullable=False)
    latitude = db.Column(db.String, nullable=False)
    longitude = db.Column(db.String, nullable=False)
    verified = db.Column(db.Boolean, nullable=False)
    sensor_id = db.Column(db.Integer,
                          db.ForeignKey('sensor.id_num', ondelete="RESTRICT"),
                          nullable=False)
    sensor = db.relationship("Sensor",
                             back_populates="seisms",
                             uselist=False,
                             passive_deletes="all",
                             single_parent=True)

    def __repr__(self):
        return f'<Seism {self.id_num} {self.datetime}'
Exemplo n.º 17
0
class ProductModel(db.Model):
    """The product model."""
    __tablename__ = 'product'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(255, collation='utf8_unicode_ci'))
    thumbnail = db.Column(db.String(128))
    rating = db.Column(db.Float())
    total_reviews = db.Column(db.Integer())
    url = db.Column(db.String(128))
    currency = db.Column(db.String(16))
    price = db.Column(db.Float())

    def __init__(self, title, thumbnail, rating, url, price, currency, total_reviews):
        self.title = title
        self.thumbnail = thumbnail
        self.rating = rating
        self.total_reviews = total_reviews
        self.url = url
        self.price = price
        self.currency = currency

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()
Exemplo n.º 18
0
class Sensor(db.Model):
    id_num = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), nullable=False)
    ip = db.Column(db.String(50), nullable=False)
    port = db.Column(db.Integer, nullable=False)
    status = db.Column(db.Boolean, nullable=False)
    active = db.Column(db.Boolean, nullable=False)
    user_id = db.Column(db.Integer,
                        db.ForeignKey("user.id_num"),
                        nullable=True)
    user = db.relationship("User",
                           back_populates="sensors",
                           uselist=False,
                           single_parent=True)
    seisms = db.relationship("Seism",
                             back_populates="sensor",
                             passive_deletes="all",
                             single_parent=True)

    def __repr__(self):
        return f'<Sensor {self.id_num} {self.name} >'
Exemplo n.º 19
0
class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, index=True)   
    password = db.Column(db.String(128))
    name = db.Column(db.String(30))
    confirmed = db.Column(db.Boolean, default=False)
    active = db.Column(db.Boolean, default=True)
    role_id = db.Column(db.Integer, db.ForeignKey('role.id'))
    role = db.relationship('Role',cascade='all', back_populates='users')
    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)
        self.set_role('User')
    def set_password(self, password):
        self.password = generate_password_hash(password)
    def set_role(self,role):
        if role is None:
            self.role = Role.query.filter_by(name='User').first()
            # db.session.commit()
        else:
            self.role = Role.query.filter_by(name=role).first()
            # db.session.commit()
    def __str__(self):
        return str(self.name)
    def validate_password(self, password):
        if(check_password_hash(self.password, password) or self.password==password):#搞清楚xadmin为什么存储的是明文密码后把这个改了
            return True
        else:
            return False
    def has_role(self,role):
        return self.role.name == role
    @property
    def is_admin(self):
        return self.role.name == 'Administrator'
    @property
    def is_active(self):
        return self.active
    def can(self, permission_name):
        permission = Permission.query.filter_by(name=permission_name).first()
        return permission is not None and self.role is not None and permission in self.role.permissions
Exemplo n.º 20
0
class ResultModel(db.Model, TimestampMixin):
    """The result model"""

    __tablename__ = 'result'
    id = db.Column(db.Integer(), primary_key=True)
    mode = db.Column(db.String(16))
    time = db.Column(db.SmallInteger())
    accuracy = db.Column(db.Float())
    wpm = db.Column(db.Float())
    user_id = db.Column(db.Integer(), db.ForeignKey('user.id'))

    def __init__(self, mode, time, accuracy, wpm, user_id):
        self.mode = mode
        self.time = time
        self.accuracy = accuracy
        self.wpm = wpm
        self.user_id = user_id

    def save_to_db(self):
        db.session.add(self)
        db.session.commit()
Exemplo n.º 21
0
class TimestampMixin(object):
    created = db.Column(db.DateTime, default=datetime.utcnow, nullable=False)
    updated = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, nullable=False)
Exemplo n.º 22
0
class NO_FLYREGION(db.Model):
    gid = db.Column(db.Integer, primary_key=True)
    is_enable = db.Column(db.String(32))
    start_time = db.Column(db.DateTime)
    end_time = db.Column(db.DateTime)
    reg_name = db.Column(db.String(256))
    reg_radius = db.Column(db.Float)
    remark = db.Column(db.String(256))
    valid_time = db.Column(db.String(128))
    reg_gov = db.Column(db.String(256))
    reg_type = db.Column(db.Integer)
    reg_cpoint = db.Column(db.String(64))
    guid = db.Column(db.String(256))
    law_url = db.Column(db.String(256))
    geo = db.Column(Geometry('Polygon'))
Exemplo n.º 23
0
class Task(db.Model):
    id=db.Column(db.Integer,primary_key=True)
    name=db.Column(db.String(128))#任务名称
    create_time=db.Column(db.DateTime,default=datetime.datetime.now())
Exemplo n.º 24
0
class Message(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name=db.Column(db.String(100))
    body = db.Column(db.String(1000))
    timestamp = db.Column(db.DateTime, default=datetime.datetime.now(), index=True)
Exemplo n.º 25
0
class Permission(db.Model):
    __tablename__ = 'permission'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), unique=True)
    roles = db.relationship('Role', secondary=roles_permissions, back_populates='permissions')
Exemplo n.º 26
0
class Role(db.Model,RoleMixin):
    __tablename__ = 'role'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30), unique=True)
    users = db.relationship('User', cascade='all',back_populates='role')
    permissions = db.relationship('Permission', cascade='all',secondary=roles_permissions, back_populates='roles')
    menus=db.relationship('Menu',cascade='all', secondary=roles_menus, back_populates='roles')
    imgServers=db.relationship('ImgServer',cascade='all', secondary=roles_imgs, back_populates='roles')#角色与创建的影像服务是多对多关系
    lines=db.relationship('Line',cascade='all', secondary=roles_lines, back_populates='roles')
    points=db.relationship('Point',cascade='all', secondary=roles_points, back_populates='roles')
    layers=db.relationship('Layer',cascade='all', secondary=roles_layers, back_populates='roles')
    def __str__(self):
        return str(self.name)
    #获取服务名-服务对象键值对
    def getImgDic(self):
        dic={}
        imgs=self.imgServers
        for img in imgs:
            dic[img.name]=img
        return dic
    #获取图层-图层id键值对
    def getLayerDic(self):
        layerMenus=self.getLayers()
        layerDic={}
        for layerMenu in layerMenus:
            layerDic[layerMenu['name']]=layerMenu['id']
        return layerDic
    #查询该角色管理的图层
    def getLayers(self):
        layers=db.session.query(Layer).filter(Layer.roles.contains(self)).all()
        layerMenus=[]
        for layer in layers:
            layerMenus.append({
                "name":layer.name,
                "id":layer.id
            })
        return layerMenus
    #查询该角色管理的矢量数据
    def getGeoMenus(self):
        geos=[]
        lines=db.session.query(Line).filter(Line.roles.contains(self)).all()
        pts=db.session.query(Point).filter(Point.roles.contains(self)).all()
        geos.extend(lines)
        geos.extend(pts)
   
        geoIndex=[]
        for geo in geos:
            geoIndex.append({
                "name":geo.name,
                "uid":geo.uid
            })
        return geoIndex
    # __hash__ is required to avoid the exception TypeError: unhashable type: 'Role' when saving a User
    def __hash__(self):
        return hash(self.name)
    @staticmethod
    def init_role(config):#静态方法,建立与角色的多对多关系
        menuMap=config.MenuMap
        roles_permissions_map = {
            'User': ['Add', 'Delete', 'Update', 'Query', 'Import', 'Save', 'Export', 'Publish'],
            'Administrator': ['Add', 'Delete', 'Update', 'Query', 'Import', 'Save', 'Export', 'Publish', 'Setting']
        }
        roles_menus_map= {
                'User': ['首页','数据抓取', '数据对比', '影像地图', '矢量地图', '添加数据'],
                'Administrator': ['首页','数据抓取', '数据对比', '影像地图', '矢量地图', '添加数据', '设置']
            }
        for role_name in roles_permissions_map:
            role = Role.query.filter_by(name=role_name).first()
            if role is None:
                role = Role(name=role_name)
                db.session.add(role)
            role.permissions = []
            for permission_name in roles_permissions_map[role_name]:#初始化权限表
                permission = Permission.query.filter_by(name=permission_name).first()
                if permission is None:
                    permission = Permission(name=permission_name)
                    db.session.add(permission)
                role.permissions.append(permission)
            order=0
            for menu_name in roles_menus_map[role_name]:#初始化menu
                menu = Menu.query.filter_by(name=menu_name).first()
                if menu is None:
                    menuConfig=menuMap[menu_name]
                    menu = Menu(id=menuConfig['order'],code=menuConfig['code'],name=menu_name,order=menuConfig['order'],url=menuConfig['url'],icon=menuConfig['icon'])
                    
                    childs=menuConfig['childs']#获取子菜单配置
                    if len(childs)>0:
                        for child in childs:
                            secondMenu=SecondMenu(name=child['name'],order=child['order'],icon=child['icon'],url=child['url'])
                            db.session.add(secondMenu)
                            menu.secondmenus.append(secondMenu)#将该二级菜单加到对应的一级菜单中
                    db.session.add(menu)
                role.menus.append(menu)
                order=order+1
        db.session.commit()
Exemplo n.º 27
0
    def validate_password(self, password):
        print([self.password_hash,password])
        return check_password_hash(self.password_hash, password)

class _File(db.Model):#文件模型
    id=db.Column(db.Integer,primary_key=True)
    describertion=db.Column(db.String(100))#文件描述
    time=db.Column(db.DateTime)
    uid=db.Column(db.String(60))#唯一值
    path=db.Column(db.String(100))#存放路径
    def __init__(self):
        self.uid=uuid.uuid4()
# 关联表
roles_permissions = db.Table('roles_permissions',
                             db.Column('role_id', db.Integer, db.ForeignKey('role.id')),
                             db.Column('permission_id', db.Integer, db.ForeignKey('permission.id'))
                             )
roles_menus=db.Table('roles_menus',
                             db.Column('role_id', db.Integer, db.ForeignKey('role.id')),
                             db.Column('menu', db.Integer, db.ForeignKey('menu.id'))
                             )
roles_imgs=db.Table('roles_imgs',
                             db.Column('role_id', db.Integer, db.ForeignKey('role.id')),
                             db.Column('img', db.Integer, db.ForeignKey('img.id'))
                             )
roles_lines=db.Table('roles_lines',
                             db.Column('role_id', db.Integer, db.ForeignKey('role.id')),
                             db.Column('line', db.Integer, db.ForeignKey('line.id'))
                             )
roles_points=db.Table('roles_points',