Ejemplo n.º 1
0
class Ins(db.Model):
    __tablename__ = 'ins'
    id = db.Column(db.String(24), default=objectid, primary_key=True)
    type = db.Column(db.String(255), comment='机构类型')
    name = db.Column(db.String(50), comment='机构名称')
    ins_picture = db.Column(db.String(255), comment='机构图片')
    location_id = db.Column(db.String(50),
                            db.ForeignKey('location.id'),
                            comment='位置')
    ins_address = db.Column(db.String(255), comment='机构地址')
    note = db.Column(db.Text, comment='备注')
    latitude = db.Column(db.Float(asdecimal=True), comment='纬度')
    longitude = db.Column(db.Float(asdecimal=True), comment='经度')
    admin_user_id = db.Column(db.String(24),
                              db.ForeignKey('user.id'),
                              comment='管理员id')
    community = db.relationship('Community',
                                secondary=t_community_ins,
                                backref=db.backref('f1_community',
                                                   lazy='dynamic'),
                                lazy='dynamic')
    user = db.relationship('User',
                           secondary=t_user_ins,
                           backref=db.backref('f_user', lazy='dynamic'),
                           lazy='dynamic')
    disabled = db.Column(db.Boolean,
                         nullable=False,
                         default=False,
                         comment='是否可用')
Ejemplo n.º 2
0
class User(db.Model):

    __tablename__ = 'user'
    id = db.Column(db.String(24), default=objectid, primary_key=True)
    disabled = db.Column(db.Boolean,
                         nullable=False,
                         default=False,
                         comment='是否停用   (1、禁用 0、正常)')
    contract_tel = db.Column(db.String(20), comment='用户电话')
    username = db.Column(db.String(20), index=True, comment='用户名)')
    password = db.Column(db.String(32), comment='密码')
    email = db.Column(db.String(60), comment='email')
    #salt = db.Column(db.String(50), comment='加密盐')
    createTime = db.Column(db.DateTime,
                           default=datetime.datetime.now,
                           comment='创建时间')
    #lastTime = db.Column(db.DateTime, comment='最后登陆时间')
    user_role = db.relationship('UserRole',
                                foreign_keys=[UserRole.user_id],
                                backref=db.backref('f_user_role',
                                                   lazy='joined'),
                                lazy='dynamic')
    #real_name = db.Column(db.String(50), comment='姓名')
    sensor_visable = db.Column(db.Boolean, default=True, comment='传感器是否可见')
    ins = db.relationship('Ins',
                          secondary=t_user_ins,
                          backref=db.backref('f_ins', lazy='dynamic'),
                          lazy='dynamic')
Ejemplo n.º 3
0
class Comment(Base):
    __tablename__ = 'comments'
    id = Column(Integer, primary_key=True)
    content = Column(Text)
    created = Column(DateTime, default=datetime.now)
    commenter_name = Column(String(64))
    commenter_email = Column(String(64))
    # 头像相关
    avatar_hash = Column(String(32))

    article_id = Column(Integer, ForeignKey('articles.id'))
    disabled = Column(Boolean, default=False)
    comment_type = Column(db.String(64), default='comment')
    reply_to = Column(String(128), default='notReply')

    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')

    @property
    def replys(self):
        return [i.follower for i in self.followers]

    # 根据email 生成图像
    def __init__(self, **kwargs):
        super(Comment, self).__init__(**kwargs)
        if self.commenter_email is not None and self.avatar_hash is None:
            self.avatar_hash = hashlib.md5(
                self.commenter_email.encode('utf-8')).hexdigest()

    def gravatar(self, size=40, default='identicon', rating='g'):
        if request.is_secure:
            url = 'https://secure.gravatar.com/avatar'
        else:
            url = 'http://www.gravatar.com/avatar'
        hash = self.avatar_hash or hashlib.md5(
            self.commenter_email.encode('utf-8')).hexdigest()
        return '{url}/{hash}?s={size}&d={default}&r={rating}'.format(
            url=url, hash=hash, size=size, default=default, rating=rating)

    def followed_name(self):
        if self.is_reply():
            return self.followed.first().followed.commenter_name

    def __repr__(self):
        return '<Comment %r>' % self.id

    def __str__(self):
        return self.id
Ejemplo n.º 4
0
class UserRole(db.Model):
    __tablename__ = 'user_role'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    user_id = db.Column(db.String(24), db.ForeignKey('user.id'), index=True)
    role_id = db.Column(db.String(24), db.ForeignKey('role.id'), index=True)
    disable = db.Column(db.Boolean, nullable=False, default=False)
    role = db.relationship('Role',
                           backref=db.backref('f1_role', lazy='dynamic'),
                           lazy='joined')
    user = db.relationship('User',
                           backref=db.backref('f1_user', lazy='dynamic'),
                           lazy='joined')
Ejemplo n.º 5
0
class User(db.Model, UserMixin):
    __tablename__ = 'users'

    id = db.Column(db.Integer(), autoincrement=True, primary_key=True)
    name = db.Column(db.String(64))
    login = db.Column(db.String(64), unique=True)
    password = db.Column(db.String(255))

    is_active = db.Column(db.Boolean(), server_default=expression.text('True'), nullable=False)  # 这里使用 expression.true() 似乎不起作用

    roles = db.relationship(
        'Role',
        secondary=users_roles,
        backref=db.backref('users', lazy='dynamic')
    )

    def set_password(self, password):
        return pbkdf2_sha256.hash(password)

    def check_password(self, password):
        return pbkdf2_sha256.verify(password, self.password)

    def is_authenticated(self):
        return not isinstance(self, AnonymousUserMixin)

    def is_anonymous(self):
        return isinstance(self, AnonymousUserMixin)

    def get_id(self):
        return self.id

    def __repr__(self):
        return '<Model User {}>'.format(self.name)
Ejemplo n.º 6
0
class Note(Base):
    """
   公告表
    """
    __tablename__ = "notes"

    content = db.Column(db.String(255), nullable=False, comment="公告内容")
    level = db.Column(db.Integer(), default=0, comment="排序")
    start_date = db.Column(db.Date(), default="", comment="起始时间")
    end_date = db.Column(db.Date(), default="", comment="结束时间")

    admin_id = db.Column(db.Integer(), db.ForeignKey('admins.id'))

    admin = db.relationship('Admin', backref=db.backref('notes', lazy="dynamic"))

    @classmethod
    def _query_search(cls, query, _keyword):
        if _keyword is not None:
            keyword = '%' + str(_keyword) + '%'
            return query.filter(or_(cls.content.like(keyword), ))
        return query

    def create(self, data):
        with db.auto_commit():
            self.set_attrs(data)
            self.active = 1
            self.admin = current_user
            self.created_at = time_now()
            self.updated_at = time_now()
            db.session.add(self)
Ejemplo n.º 7
0
class Role(db.Model):
    __tablename__ = 'role'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    name = db.Column(db.String(30), nullable=False)
    disabled = db.Column(db.Boolean,
                         nullable=False,
                         default=True,
                         comment='是否可用')
    description = db.Column(db.String(60), comment='权限描述')
    user_role = db.relationship('UserRole',
                                foreign_keys=[UserRole.role_id],
                                backref=db.backref('F_user_role',
                                                   lazy='joined'),
                                lazy='dynamic')
    menus = db.relationship('Menu',
                            secondary=t_role_menu,
                            backref=db.backref('role_menus', lazy='dynamic'),
                            lazy='dynamic')
Ejemplo n.º 8
0
class Currentrecord(db.Model):
    __tablename__ = 'currentrecord'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    currentperson_id = db.Column(db.String(24), db.ForeignKey('user.id'))
    currenttime = db.Column(db.DateTime, default=datetime.datetime.now)
    currentcontent = db.Column(db.Text)
    attachment = db.Column(db.String(200))
    work_id = db.Column(db.String(24), db.ForeignKey('workorder.id'))
    work = db.relationship('Workorder',
                           backref=db.backref('f1_worker', lazy='dynamic'),
                           lazy='joined')
Ejemplo n.º 9
0
class Consume(db.Model):
    __tablename__ = 'consume'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    reporter_id = db.Column(db.String(24))
    report_time = db.Column(db.DateTime)
    consume_name = db.Column(db.String(32))
    count = db.Column(db.Integer)
    work_id = db.Column(db.String(24), db.ForeignKey('workorder.id'))
    work = db.relationship('Workorder',
                           backref=db.backref('f_worker', lazy='dynamic'),
                           lazy='joined')
Ejemplo n.º 10
0
class Alarm(db.Model):
    __tablename__ = 'alarm'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    type = db.Column(db.Integer)
    value = db.Column(db.Float)
    time = db.Column(db.DateTime, default=datetime.datetime.now)
    if_confirm = db.Column(db.Boolean, nullable=False, default=False)
    note = db.Column(db.Text)
    node_id = db.Column(db.String(24), db.ForeignKey('node.id'))
    node = db.relationship('Node',
                           backref=db.backref('f1_node', lazy='dynamic'),
                           lazy='joined')
Ejemplo n.º 11
0
class Equipment(db.Model):
    __tablename__ = 'equipment'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    name = db.Column(db.String(50))
    type = db.Column(db.Integer)
    picture = db.Column(db.String(200))
    note = db.Column(db.Text)
    status = db.Column(db.Integer)
    orgs = db.relationship('Organization',
                           secondary='org_equ',
                           backref=db.backref('f_equi_orgs', lazy='dynamic'),
                           lazy='dynamic')
Ejemplo n.º 12
0
class Node(db.Model):
    __tablename__ = 'node'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    name = db.Column(db.String(50))
    type = db.Column(db.Integer)
    status = db.Column(db.Integer)
    value = db.Column(db.Float)
    note = db.Column(db.Text)
    equ_id = db.Column(db.String(24),
                       db.ForeignKey('equipment.id'),
                       index=True)
    equ = db.relationship('Equipment',
                          backref=db.backref('f_node_equ', lazy='dynamic'),
                          lazy='joined')
Ejemplo n.º 13
0
class Facility(db.Model):
    __tablename__ = 'facility'
    id = db.Column(db.String(24), default=objectid, primary_key=True)
    facility_name = db.Column(db.String(50), comment='设施名')
    facility_picture = db.Column(db.String(200), comment='设施图片')
    note = db.Column(db.String(200), comment='备注')
    knowledge = db.relationship('Knowledge',
                                secondary=t_facility_knowledge,
                                backref=db.backref('f_knowledge',
                                                   lazy='dynamic'),
                                lazy='dynamic')
    disabled = db.Column(db.Boolean,
                         nullable=False,
                         default=False,
                         comment='是否可用')
Ejemplo n.º 14
0
class User(db.Model):
    __tablename__ = 'user'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    username = db.Column(db.String(24))
    real_name = db.Column(db.String(50))
    password = db.Column(db.String(32))
    email = db.Column(db.String(60))
    user_tel = db.Column(db.String(20))
    salt = db.Column(db.String(50))
    disabled = db.Column(db.Boolean, nullable=False, default=False)
    createtime = db.Column(db.DateTime, default=datetime.datetime.now)
    lastTime = db.Column(db.DateTime)
    works = db.relationship('Workorder',
                            secondary='user_work',
                            backref=db.backref('f_user_work', lazy='dynamic'),
                            lazy='joined')
Ejemplo n.º 15
0
class Organization(db.Model):
    __tablename__ = 'organization'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    name = db.Column(db.String(50))
    address = db.Column(db.String(255))
    picture = db.Column(db.String(200))
    telephone = db.Column(db.String(20))
    admin_user_id = db.Column(db.String(24), db.ForeignKey('user.id'))
    longitude = db.Column(db.Numeric(10, 7))
    latitude = db.Column(db.Numeric(10, 7))
    note = db.Column(db.Text)

    users = db.relationship('User',
                            secondary='user_org',
                            backref=db.backref('f_org_user', lazy='dynamic'),
                            lazy='dynamic')
Ejemplo n.º 16
0
class Focus(Base):
    """
    焦点图表
    """
    __tablename__ = "focuses"

    title = db.Column(db.String(20), nullable=False, comment="焦点图名称", unique=True)
    label = db.Column(db.String(255), default="", comment="焦点图说明")
    link = db.Column(db.String(100), default="", comment="链接")
    thumb_image = db.Column(db.String(100), default="", comment="缩略图")
    target = db.Column(db.Boolean(), default=0, comment="新窗口打开")
    column_id = db.Column(db.Integer(), db.ForeignKey('columns.id'))
    level = db.Column(db.Integer(), default=0, comment="排序")

    column = db.relationship('Column', backref=db.backref('focuses', lazy="dynamic"))

    @classmethod
    def _query_search(cls, query, _keyword):
        if _keyword is not None:
            keyword = '%' + str(_keyword) + '%'
            return query.filter(or_(cls.title.like(keyword), cls.label.like(keyword), ))
        return query

    def create(self, data):
        with db.auto_commit():
            self.column = Column.query.filter_by(id=data['column_id']).api_first_or_404()
            self.set_attrs(data)
            self.active = 1
            self.created_at = time_now()
            self.updated_at = time_now()
            db.session.add(self)

    def update(self, data, edit_one_field=None):
        """
        edit_one_field 是否表内单个编辑 标识
        :param data:
        :param flag:
        :return:
        """
        with db.auto_commit():
            if not edit_one_field:
                self.column = Column.query.filter_by(id=data['column_id']).api_first_or_404()
                self.set_attrs(data)
            else:
                self.set_attr(data)
            self.updated_at = time_now()
Ejemplo n.º 17
0
class Knowledge(db.Model):
    __tablename__ = 'knowledge'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    type = db.Column(db.String(50),
                     comment='知识类型   (0.消防 1.逃生 2.灭火 3.新闻 4.其他)')
    content = db.Column(db.Text, comment='知识正文')
    title = db.Column(db.String(50), comment='知识标题')
    publish_time = db.Column(db.DateTime, default=datetime.datetime.now)
    publish_from = db.Column(db.String(100))
    facility = db.relationship('Facility',
                               secondary=t_facility_knowledge,
                               backref=db.backref('f_facility',
                                                  lazy='dynamic'),
                               lazy='dynamic')
    disabled = db.Column(db.Boolean,
                         nullable=False,
                         default=False,
                         comment='是否可用')
Ejemplo n.º 18
0
class Menu(db.Model):
    __tablename__ = 'menu'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    p_id = db.Column(db.String(24), db.ForeignKey('menu.id'), comment='父id')
    children = db.relationship("Menu")
    parent = db.relationship("Menu", remote_side=[id])
    label = db.Column(db.String(20), nullable=False, comment='标签')
    level = db.Column(db.SmallInteger, comment='层级')
    type = db.Column(db.SmallInteger, comment='类型')
    style = db.Column(db.String(50), comment='样式')
    disabled = db.Column(db.Boolean, default=False, comment='是否可用')
    roles = db.relationship('Role',
                            secondary=t_role_menu,
                            backref=db.backref('menu_roles', lazy='dynamic'),
                            lazy='dynamic')
    path = db.Column(db.String(200), comment='和url什么区别???')
    order = db.Column(db.SmallInteger, comment='?????')
    url = db.Column(db.String(200), comment='和path什么区别???')
Ejemplo n.º 19
0
class Permission(Base):
    """
    权限表
    """
    __tablename__ = "permissions"

    name = db.Column(db.String(20), nullable=False, comment="权限名称", unique=True)
    endpoint_name = db.Column(db.String(20), nullable=False, comment="endpoint名称", unique=True)
    label = db.Column(db.String(20), nullable=True, default="", comment="权限说明")
    level = db.Column(db.Integer(), default=0, comment="排序")
    menu_id = db.Column(db.Integer(), db.ForeignKey('menus.id'), default=0, comment="后台菜单ID")

    menu = db.relationship("Menu", backref=db.backref("permissions",lazy="dynamic"))

    @classmethod
    def _query_search(cls, query, _keyword):
        if _keyword is not None:
            keyword = '%' + str(_keyword) + '%'
            return query.filter(or_(cls.name.like(keyword), cls.label.like(keyword), cls.endpoint_name.like(keyword)))
        return query
Ejemplo n.º 20
0
class Community(db.Model):
    __tablename__ = 'community'

    id = db.Column(db.String(24), default=objectid, primary_key=True)
    name = db.Column(db.String(255), comment='社区名')
    community_picture = db.Column(db.String(200), comment='社区图片')
    detail_address = db.Column(db.String(255), comment='详细地址')
    save_distance = db.Column(db.Integer, comment='求救距离')
    eva_distance = db.Column(db.Integer, comment='疏散距离')
    longitude = db.Column(db.Float(asdecimal=True), comment='经度')
    latitude = db.Column(db.Float(asdecimal=True), comment='纬度')
    ins = db.relationship('Ins',
                          secondary=t_community_ins,
                          backref=db.backref('f1_ins', lazy='dynamic'),
                          lazy='dynamic')
    homes = db.relationship('Home', lazy='dynamic')
    location_id = db.Column(db.String(50),
                            db.ForeignKey('location.id'),
                            comment='位置')
    disabled = db.Column(db.Boolean,
                         nullable=False,
                         default=False,
                         comment='是否可用')
Ejemplo n.º 21
0
class Document(Base):
    """
    文档表
    """
    __tablename__ = "documents"

    uuid = db.Column(db.String(100),
                     nullable=False,
                     comment="别名",
                     unique=True,
                     index=True)
    title = db.Column(db.String(100),
                      nullable=False,
                      comment="文档标题",
                      unique=True)
    use_title = db.Column(db.String(100), comment="文档标题带样式")
    sub_title = db.Column(db.String(100), nullable=False, comment="副标题")
    keyword = db.Column(db.String(255), default="", comment="META关键字")
    description = db.Column(db.String(255), default="", comment="META描述")
    label = db.Column(db.String(255), default="", comment="摘要")
    external_link = db.Column(db.String(100), default="", comment="外部链接")
    published_at = db.Column(db.DateTime(), default="", comment="发布时间")
    thumb_image = db.Column(db.String(100), default="", comment="缩略图")
    author = db.Column(db.String(20), default="", comment="作者")
    source = db.Column(db.String(100), default="", comment="来源")
    source_link = db.Column(db.String(100), default="", comment="来源链接")
    attribute = db.Column(db.String(100), default="", comment="属性")
    content = db.Column(db.Text(), default="", comment="正文")
    tags = db.Column(db.String(100), default="", comment="标签", index=True)
    target = db.Column(db.Boolean(), default=0, comment="新窗口打开")
    click = db.Column(db.Integer(), default=0, comment="阅读数")
    editor = db.Column(db.String(100), default="", comment="编辑")
    is_original = db.Column(db.Boolean(), default=0, comment="是否原创")
    open_comment = db.Column(db.Boolean(), default=0, comment="允许评论")
    attach_file = db.Column(db.String(100), default="", comment="附件地址")
    attach_name = db.Column(db.String(100), default="", comment="附件名称")

    column_id = db.Column(db.Integer(),
                          db.ForeignKey('columns.id'),
                          comment="栏目id")
    admin_id = db.Column(db.Integer(),
                         db.ForeignKey('admins.id'),
                         comment="管理员id")

    column = db.relationship('Column',
                             backref=db.backref('documents', lazy="dynamic"))
    admin = db.relationship('Admin',
                            backref=db.backref('documents', lazy="dynamic"))

    login_show = db.Column(db.Boolean(), default=0, comment="登录可见")
    password_txt = db.Column(db.String(100), default=0, comment="不为空为密码可见")
    user_group = db.Column(db.Boolean(), default=0, comment="VIP可见")

    @classmethod
    def _query_search(cls, query, _keyword):
        if _keyword is not None:
            keyword = '%' + str(_keyword) + '%'
            return query.filter(
                or_(
                    cls.title.like(keyword),
                    cls.label.like(keyword),
                    cls.keyword.like(keyword),
                    cls.description.like(keyword),
                    cls.author.like(keyword),
                ))
        return query

    def create(self, data):
        attributes = request.form.getlist('attribute[]')
        with db.auto_commit():
            self.set_attrs(data)
            self.active = 1
            self.admin = current_user
            self.attribute = ",".join(attributes)
            self.created_at = time_now()
            self.updated_at = time_now()
            db.session.add(self)

    def update(self, data, edit_one_field=None):
        """
        edit_one_field 是否表内单个编辑 标识
        :param data:
        :param flag:
        :return:
        """
        attributes = request.form.getlist('attribute[]')
        with db.auto_commit():
            if not edit_one_field:
                self.set_attrs(data)
                self.attribute = ",".join(attributes)
            else:
                self.set_attr(data)
            self.updated_at = time_now()
Ejemplo n.º 22
0
class Article(Base):
    __tablename__ = 'articles'
    query_class = ArticleQuery
    # per_page = current_app.config['PER_PAGE']

    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(256), index=True)
    summary = Column(Text)
    published = Column(Boolean, default=True)

    hits = Column(Integer, default=0)

    content = Column(Text)
    content_html = Column(Text)
    created = Column(DateTime())
    last_modified = Column(DateTime())

    author_id = Column(Integer, ForeignKey(User.id))

    tags = relationship(Tag,
                        secondary=article_tags_table,
                        backref=db.backref("articles"))
    category_id = Column(Integer(), ForeignKey(Category.id), nullable=False)
    source_id = Column(
        Integer,
        ForeignKey(Source.id),
        nullable=False,
    )
    comments = db.relationship('Comment', backref='article', lazy='dynamic')

    def __repr__(self):
        return '<Article %r>' % (self.title)

    def __str__(self):
        return self.title\

    @property
    def year(self):
        return int(self.created.year)

    @property
    def month_and_day(self):
        return str(self.created.month) + "-" + str(self.created.day)

    @property
    def link(self):
        return url_for('web.article', id=self.id, _external=True)

    @property
    def month_and_day(self):
        return str(self.created.month) + "-" + str(self.created.day)

    @property
    def get_next(self):
        pass

    @property
    def get_prev(self):
        pass

    @property
    def has_more(self):
        return pattern_hasmore.search(self.body) is not None or \
               self.summary.find('...') >= 0

    @staticmethod
    def on_change_content(target, value, oldvalue, initiator):
        target.content_html = markitup(value)

        # TODO 有问题
        def _format(_html):
            return do_truncate(do_striptags(_html), length=200)

        if target.summary is None or target.summary.strip() == '':
            # 新增文章时,如果 summary 为空,则自动生成

            _match = pattern_hasmore.search(value)
            if _match is not None:
                more_start = _match.start()
                # target.summary = _format(markitup(value[:more_start]))
                target.summary = markitup(value[:more_start])
            else:
                target.summary = target.body_html

    @staticmethod
    def before_insert(mapper, connection, target):
        def _format(_html):
            return do_truncate(do_striptags(_html), length=200)

        value = target.content
        if target.summary is None or target.summary.strip() == '':
            # 新增文章时,如果 summary 为空,则自动生成

            _match = pattern_hasmore.search(value)
            if _match is not None:
                more_start = _match.start()
                target.summary = _format(markitup(value[:more_start]))
            else:
                target.summary = _format(target.body_html)