class Message(Base): """ 短信表 """ __tablename__ = "messages" content = db.Column( db.String(255), nullable=False, comment="短信内容", ) user_id = db.Column(db.Integer(), default=0, comment="短信发布者") username = db.Column(db.String(20), nullable=False, comment="短信发布者用户名") ip = db.Column(db.String(20), default="", comment="ip地址") published_at = db.Column(db.DateTime(), default="", comment="发布时间") pid = db.Column(db.Integer(), default=0, comment="所属短信id") label = db.Column(db.String(100), default="", comment="预留") @classmethod def _query_search(cls, query, _keyword): if _keyword is not None: keyword = '%' + str(_keyword) + '%' return query.filter( or_( cls.content.like(keyword), cls.username.like(keyword), )) return query
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)
class Column(Base): """ 栏目表 """ __tablename__ = "columns" title = db.Column(db.String(20), nullable=False, comment="栏目名称", unique=True) keyword = db.Column(db.String(255), default="", comment="META关键字") description = db.Column(db.String(255), default="", comment="META描述") column_type = db.Column(db.String(20), default="", comment="栏目类型") thumb_image = db.Column(db.String(100), default="", comment="栏目缩略图") label = db.Column(db.String(255), default="", comment="栏目说明") external_link = db.Column(db.String(100), default="", comment="外部链接") level = db.Column(db.Integer(), default=0, comment="排序") pid = db.Column(db.Integer(), default=0, comment="父级节点id") target = db.Column(db.Boolean(), default=0, comment="新窗口打开") @classmethod def _query_search(cls, query, _keyword): if _keyword is not None: keyword = '%' + str(_keyword) + '%' return query.filter( or_( cls.title.like(keyword), cls.keyword.like(keyword), cls.description.like(keyword), cls.label.like(keyword), )) return query
class User(Base, UserMixin): """ 用户表 """ __tablename__ = "users" name = db.Column(db.String(length=20), nullable=False, comment="用户名", index=True, unique=True) email = db.Column(db.String(length=20), nullable=False, comment="用户邮箱", index=True, unique=True) """ 属性名用 _password ,创建的字段未password """ _password = db.Column('password', db.String(length=128), nullable=False, comment="密码") nick_name = db.Column(db.String(length=20), default='', comment="昵称") chinese_name = db.Column(db.String(length=20), default='', comment="中文姓名") avatar = db.Column(db.String(length=100), default='', comment="头像") sex = db.Column(db.Boolean(), comment="性别", default=0) phone = db.Column(db.String(length=20), default='', comment="电话", index=True, unique=True) qq = db.Column(db.String(length=20), default='', comment="QQ") remarks = db.Column(db.String(length=255), default='', comment="备注") login_ip = db.Column(db.String(length=20), default='', comment="登录ip") login_time = db.Column(db.String(length=20), default='', comment="登录时间") login_count = db.Column(db.Integer(), default=0, comment="登录次数") integral = db.Column(db.Integer(), default=0, comment="积分") group_id = db.Column(db.Integer(), db.ForeignKey("groups.id")) # 属性的getter @property def password(self): return self._password # 属性的setter @password.setter def password(self, raw): self._password = generate_password_hash(raw) # 校验密码 def check_password(self, raw): return check_password_hash(self._password, raw) # get_id 返回str字符串,通过 user 来做标识 def get_id(self): return 'user.' + str(self.id)
class Guestbook(Base): """ 留言表 """ __tablename__ = "guestbooks" content = db.Column(db.String(255), nullable=False, comment="留言内容", ) user_id = db.Column(db.Integer(), default=0, comment="留言者") user_type = db.Column(db.String(5), default="user", comment="用户类型") username = db.Column(db.String(20), default="游客", comment="留言着用户名") ip = db.Column(db.String(20), default="", comment="ip地址") published_at = db.Column(db.DateTime(), default="", comment="留言时间") pid = db.Column(db.Integer(), default=0, comment="所属父级留言id") root_id = db.Column(db.String(255),index=True, default=0, comment="节点数据") open_comment = db.Column(db.Boolean(), default=0, comment="允许回复我留言") good = db.Column(db.Integer(), default=0, comment="点赞") read = db.Column(db.Integer(), default=0, comment="是否已读") label = db.Column(db.String(100), default="", comment="预留") @classmethod def _query_search(cls, query, _keyword): if _keyword is not None: keyword = '%' + str(_keyword) + '%' return query.filter(or_(cls.content.like(keyword), cls.username.like(keyword), )) return query def create(self, data): with db.auto_commit(): self.set_attrs(data) self.active = 1 self.open_comment = 1 self.ip = get_client_ip() self.user_id = current_user.id self.username = current_user.name self.user_type = 'admin' self.published_at = time_now() self.created_at = time_now() self.updated_at = time_now() db.session.add(self) @classmethod def get_list_all_by_id(cls, id=id): query = cls.query.filter(cls.is_delete == 0, cls.root_id.like('%' + str(id) + '%')) total = query.with_entities(func.count(cls.id)).scalar() result = query.all() result = array_sort_by_pid(arrays=result, html="", pid=int(id)) return total, result @classmethod def get_by_root_id(cls, root_id=root_id): return cls.query.filter(cls.is_delete == 0, cls.root_id == root_id).first()
class Link(Base): """ 友情链接表 """ __tablename__ = "links" site_name = db.Column(db.String(20), nullable=False, comment="网站名称", unique=True) site_url = db.Column(db.String(100), default="", comment="网址") label = db.Column(db.String(255), default="", comment="网站说明") logo = db.Column(db.String(100), default="", comment="网站logo") site_admin = db.Column(db.String(20), default="", comment="网站管理员") site_admin_email = db.Column(db.String(100), default="", comment="网站管理员邮箱") site_admin_qq = db.Column(db.String(20), default="", comment="网站管理员QQ") site_admin_phone = db.Column(db.String(20), default="", comment="网站管理员电话") home_show = db.Column(db.Boolean(), default=0, comment="首页显示") level = db.Column(db.Integer(), default=0, comment="排序") @classmethod def _query_search(cls, query, _keyword): if _keyword is not None: keyword = '%' + str(_keyword) + '%' return query.filter(or_(cls.site_name.like(keyword), cls.site_admin.like(keyword), cls.site_admin_email.like(keyword), cls.site_admin_qq.like(keyword), cls.site_admin_phone.like(keyword), cls.label.like(keyword), )) return query
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)
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()
class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer(), autoincrement=True, primary_key=True) name = db.Column(db.String(90), unique=True) description = db.Column(db.String(28)) def __repr__(self): return '<Model Role {}>'.format(self.name)
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
class Mail(Base): """ 网站配置表 """ __tablename__ = "mails" mail_server = db.Column(db.String(100), nullable=False, comment="邮箱服务器") port = db.Column(db.Integer(), default=0, comment="端口") link_model = db.Column(db.String(10), default=0, comment="连接类型") username = db.Column(db.String(100), nullable=False, comment="邮箱用户名") password = db.Column(db.String(100), nullable=False, comment="邮箱密码或秘钥")
class Menu(Base): """ 后台菜单表 """ __tablename__ = "menus" name = db.Column(db.String(20), nullable=False, comment="菜单名称", unique=True) label = db.Column(db.String(255), nullable=True, default="", comment="菜单说明") level = db.Column(db.Integer(), default=0, comment="排序") pid = db.Column(db.Integer(), default=0, comment="父级节点id") icon = db.Column(db.String(20), nullable=True, default="", comment="图标") endpoint_name = db.Column(db.String(50), nullable=True, default="", comment="endpoint名称") target = db.Column(db.Boolean(), default=0, comment="新窗口打开") @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
class System(Base): """ 网站配置表 """ __tablename__ = "systems" site_name = db.Column(db.String(100), nullable=False, comment="网站名称", unique=True) title = db.Column(db.String(100), nullable=False, comment="网站标题", ) keyword = db.Column(db.String(100), nullable=False, comment="META关键词", ) description = db.Column(db.String(100), nullable=False, comment="META描述", ) icp = db.Column(db.String(100), default="", comment="备案信息", ) census_code = db.Column(db.String(255), default="", comment="统计代码", ) copyright = db.Column(db.String(255), default="", comment="版权信息", ) upload_path = db.Column(db.String(100), default="", comment="上传路径", ) water_type = db.Column(db.String(10), default='', comment="水印类型", ) images_water = db.Column(db.String(255), default="", comment="水印文件", ) txt_water = db.Column(db.String(100), default="", comment="水印文字", ) txt_water_size = db.Column(db.String(100), default="", comment="水印文字大小", ) txt_water_font = db.Column(db.String(100), default="", comment="文字水印字体", ) txt_water_color = db.Column(db.String(20), default="", comment="文字水印颜色", ) images_size = db.Column(db.Integer(), default=0, comment="最大图片大小", ) images_extensions = db.Column(db.String(255), default="", comment="图片类型", ) images_max_width = db.Column(db.Integer(), default=0, comment="图片最大宽度", ) images_max_height = db.Column(db.Integer(), default=0, comment="图片最大高度", ) media_size = db.Column(db.Integer(), default=0, comment="媒体大小", ) media_extensions = db.Column(db.String(255), default="", comment="媒体类型", ) video_water = db.Column(db.String(255), default="", comment="视频水印地址", ) attach_size = db.Column(db.Integer(), default=0, comment="附件大小", ) attach_extensions = db.Column(db.String(255), default="", comment="附件类型", ) admin_prefix = db.Column(db.String(50), default='', comment="后台访问地址", ) open_register = db.Column(db.Boolean(), default=0, comment="允许注册", ) open_comment = db.Column(db.Boolean(), default=0, comment="开启评论", ) comment_captcha = db.Column(db.Boolean(), default=0, comment="评论开启验证码", ) document_water = db.Column(db.Boolean(), default=0, comment="文档水印", ) user_comment = db.Column(db.Boolean(), default=0, comment="开启用户评论", ) guest_comment = db.Column(db.Boolean(), default=0, comment="开启游客评论", ) comment_audit = db.Column(db.Boolean(), default=0, comment="评论开启审核", ) comment_time_interval = db.Column(db.Integer(), default=0, comment="评论时间间隔", ) open_cache = db.Column(db.Integer(), default=0, comment="开启缓存", ) cache_time = db.Column(db.Integer(), default=0, comment="缓存时间", ) pagination_number = db.Column(db.Integer(), default=0, comment="分页大小", ) celery_broker_url = db.Column(db.String(255), default="", comment="celery 配置 ", ) celery_result_backend = db.Column(db.String(255), default="", comment="celery 配置 ", )
class User(BaseUser, db.Model): __table_args__ = {'schema': "twitter"} __tablename__ = "User" follows = db.Column(db.ARRAY(db.Integer())) def __init__(self, id, follows): self.id = id self.follows = follows @property def json(self): return { "follows": self.follows, "personality": { "o": self.o, "c": self.c, "e": self.e, "a": self.a, "n": self.n } }
class Document(BaseDocument, db.Model): __table_args__ = {'schema': "twitter"} __tablename__ = "Document" stored_tweets = db.Column(db.Integer()) first = db.Column(db.Numeric()) last = db.Column(db.Numeric()) def __init__(self, id): self.id = id self.text = "" self.stored_tweets = None self.first = None self.last = None @property def json(self): return { "text": self.text, "features": self.features, "stored_tweets": self.stored_tweets, "first": self.first, "last": self.last }
# coding=utf-8 from __future__ import absolute_import from passlib.hash import pbkdf2_sha256 from app.ext import db, login_manager from app.exception import SessionExpired from flask_login import UserMixin, AnonymousUserMixin, current_user from sqlalchemy.sql import expression users_roles = db.Table('users_role', db.Column('user_id', db.Integer(), db.ForeignKey('users.id')), db.Column('role_id', db.Integer(), db.ForeignKey('roles.id'))) class Role(db.Model): __tablename__ = 'roles' id = db.Column(db.Integer(), autoincrement=True, primary_key=True) name = db.Column(db.String(90), unique=True) description = db.Column(db.String(28)) def __repr__(self): return '<Model Role {}>'.format(self.name) class User(db.Model, UserMixin): __tablename__ = 'users' id = db.Column(db.Integer(), autoincrement=True, primary_key=True) name = db.Column(db.String(64))
class Word(db.Model): __table_args__ = {'schema': "public"} __tablename__ = "Word" word = db.Column(db.String, primary_key=True) HGI_positiv = db.Column(db.Integer()) HGI_negativ = db.Column(db.Integer()) HGI_pstv = db.Column(db.Integer()) HGI_affil = db.Column(db.Integer()) HGI_ngtv = db.Column(db.Integer()) HGI_hostile = db.Column(db.Integer()) HGI_strong = db.Column(db.Integer()) HGI_power = db.Column(db.Integer()) HGI_weak = db.Column(db.Integer()) HGI_submit = db.Column(db.Integer()) HGI_active = db.Column(db.Integer()) HGI_passive = db.Column(db.Integer()) HGI_pleasur = db.Column(db.Integer()) HGI_pain = db.Column(db.Integer()) HGI_feel = db.Column(db.Integer()) HGI_arousal = db.Column(db.Integer()) HGI_emot = db.Column(db.Integer()) HGI_virtue = db.Column(db.Integer()) HGI_vice = db.Column(db.Integer()) HGI_ovrst = db.Column(db.Integer()) HGI_undrst = db.Column(db.Integer()) HGI_academ = db.Column(db.Integer()) HGI_doctrin = db.Column(db.Integer()) HGI_econ2 = db.Column(db.Integer()) HGI_exch = db.Column(db.Integer()) HGI_econ = db.Column(db.Integer()) HGI_exprsv = db.Column(db.Integer()) HGI_legal = db.Column(db.Integer()) HGI_milit = db.Column(db.Integer()) HGI_polit2 = db.Column(db.Integer()) HGI_polit = db.Column(db.Integer()) HGI_relig = db.Column(db.Integer()) HGI_role = db.Column(db.Integer()) HGI_coll = db.Column(db.Integer()) HGI_work = db.Column(db.Integer()) HGI_ritual = db.Column(db.Integer()) HGI_socrel = db.Column(db.Integer()) HGI_race = db.Column(db.Integer()) HGI_kin2 = db.Column(db.Integer()) HGI_male = db.Column(db.Integer()) HGI_female = db.Column(db.Integer()) HGI_nonadlt = db.Column(db.Integer()) HGI_hu = db.Column(db.Integer()) HGI_ani = db.Column(db.Integer()) HGI_place = db.Column(db.Integer()) HGI_social = db.Column(db.Integer()) HGI_region = db.Column(db.Integer()) HGI_route = db.Column(db.Integer()) HGI_aquatic = db.Column(db.Integer()) HGI_land = db.Column(db.Integer()) HGI_sky = db.Column(db.Integer()) HGI_object = db.Column(db.Integer()) HGI_tool = db.Column(db.Integer()) HGI_food = db.Column(db.Integer()) HGI_vehicle = db.Column(db.Integer()) HGI_bldgpt = db.Column(db.Integer()) HGI_comnobj = db.Column(db.Integer()) HGI_natobj = db.Column(db.Integer()) HGI_bodypt = db.Column(db.Integer()) HGI_comform = db.Column(db.Integer()) HGI_com = db.Column(db.Integer()) HGI_say = db.Column(db.Integer()) HGI_need = db.Column(db.Integer()) HGI_goal = db.Column(db.Integer()) HGI_try = db.Column(db.Integer()) HGI_means = db.Column(db.Integer()) HGI_persist = db.Column(db.Integer()) HGI_complet = db.Column(db.Integer()) HGI_fail = db.Column(db.Integer()) HGI_natrpro = db.Column(db.Integer()) HGI_begin = db.Column(db.Integer()) HGI_vary = db.Column(db.Integer()) HGI_increas = db.Column(db.Integer()) HGI_decreas = db.Column(db.Integer()) HGI_finish = db.Column(db.Integer()) HGI_stay = db.Column(db.Integer()) HGI_rise = db.Column(db.Integer()) HGI_exert = db.Column(db.Integer()) HGI_fetch = db.Column(db.Integer()) HGI_travel = db.Column(db.Integer()) HGI_fall = db.Column(db.Integer()) HGI_think = db.Column(db.Integer()) HGI_know = db.Column(db.Integer()) HGI_causal = db.Column(db.Integer()) HGI_ought = db.Column(db.Integer()) HGI_perceiv = db.Column(db.Integer()) HGI_compare = db.Column(db.Integer()) HGI_eval2 = db.Column(db.Integer()) HGI_eval = db.Column(db.Integer()) HGI_solve = db.Column(db.Integer()) HGI_abs2 = db.Column(db.Integer()) HGI_abs = db.Column(db.Integer()) HGI_quality = db.Column(db.Integer()) HGI_quan = db.Column(db.Integer()) HGI_numb = db.Column(db.Integer()) HGI_ord = db.Column(db.Integer()) HGI_card = db.Column(db.Integer()) HGI_freq = db.Column(db.Integer()) HGI_dist = db.Column(db.Integer()) HGI_time2 = db.Column(db.Integer()) HGI_time = db.Column(db.Integer()) HGI_space = db.Column(db.Integer()) HGI_pos = db.Column(db.Integer()) HGI_dim = db.Column(db.Integer()) HGI_rel = db.Column(db.Integer()) HGI_color = db.Column(db.Integer()) HGI_self = db.Column(db.Integer()) HGI_our = db.Column(db.Integer()) HGI_you = db.Column(db.Integer()) HGI_name = db.Column(db.Integer()) HGI_yes = db.Column(db.Integer()) HGI_no = db.Column(db.Integer()) HGI_negate = db.Column(db.Integer()) HGI_intrj = db.Column(db.Integer()) HGI_iav = db.Column(db.Integer()) HGI_dav = db.Column(db.Integer()) HGI_sv = db.Column(db.Integer()) HGI_ipadj = db.Column(db.Integer()) HGI_indadj = db.Column(db.Integer()) HGI_powgain = db.Column(db.Integer()) HGI_powloss = db.Column(db.Integer()) HGI_powends = db.Column(db.Integer()) HGI_powaren = db.Column(db.Integer()) HGI_powcon = db.Column(db.Integer()) HGI_powcoop = db.Column(db.Integer()) HGI_powaupt = db.Column(db.Integer()) HGI_powpt = db.Column(db.Integer()) HGI_powdoct = db.Column(db.Integer()) HGI_powauth = db.Column(db.Integer()) HGI_powoth = db.Column(db.Integer()) HGI_powtot = db.Column(db.Integer()) HGI_rcethic = db.Column(db.Integer()) HGI_rcrelig = db.Column(db.Integer()) HGI_rcgain = db.Column(db.Integer()) HGI_rcloss = db.Column(db.Integer()) HGI_rcends = db.Column(db.Integer()) HGI_rctot = db.Column(db.Integer()) HGI_rspgain = db.Column(db.Integer()) HGI_rsploss = db.Column(db.Integer()) HGI_rspoth = db.Column(db.Integer()) HGI_rsptot = db.Column(db.Integer()) HGI_affgain = db.Column(db.Integer()) HGI_affloss = db.Column(db.Integer()) HGI_affpt = db.Column(db.Integer()) HGI_affoth = db.Column(db.Integer()) HGI_afftot = db.Column(db.Integer()) HGI_wltpt = db.Column(db.Integer()) HGI_wlttran = db.Column(db.Integer()) HGI_wltoth = db.Column(db.Integer()) HGI_wlttot = db.Column(db.Integer()) HGI_wlbgain = db.Column(db.Integer()) HGI_wlbloss = db.Column(db.Integer()) HGI_wlbphys = db.Column(db.Integer()) HGI_wlbpsyc = db.Column(db.Integer()) HGI_wlbpt = db.Column(db.Integer()) HGI_wlbtot = db.Column(db.Integer()) HGI_enlgain = db.Column(db.Integer()) HGI_enlloss = db.Column(db.Integer()) HGI_enlends = db.Column(db.Integer()) HGI_enlpt = db.Column(db.Integer()) HGI_enloth = db.Column(db.Integer()) HGI_enltot = db.Column(db.Integer()) HGI_sklasth = db.Column(db.Integer()) HGI_sklpt = db.Column(db.Integer()) HGI_skloth = db.Column(db.Integer()) HGI_skltot = db.Column(db.Integer()) HGI_trngain = db.Column(db.Integer()) HGI_trnloss = db.Column(db.Integer()) HGI_tranlw = db.Column(db.Integer()) HGI_meanslw = db.Column(db.Integer()) HGI_endslw = db.Column(db.Integer()) HGI_arenalw = db.Column(db.Integer()) HGI_ptlw = db.Column(db.Integer()) HGI_nation = db.Column(db.Integer()) HGI_anomie = db.Column(db.Integer()) HGI_negaff = db.Column(db.Integer()) HGI_posaff = db.Column(db.Integer()) HGI_surelw = db.Column(db.Integer()) HGI_if = db.Column(db.Integer()) HGI_notlw = db.Column(db.Integer()) HGI_timespc = db.Column(db.Integer()) HGI_formlw = db.Column(db.Integer()) LIWC_function = db.Column(db.Integer()) LIWC_pronoun = db.Column(db.Integer()) LIWC_ppron = db.Column(db.Integer()) LIWC_i = db.Column(db.Integer()) LIWC_we = db.Column(db.Integer()) LIWC_you = db.Column(db.Integer()) LIWC_shehe = db.Column(db.Integer()) LIWC_they = db.Column(db.Integer()) LIWC_ipron = db.Column(db.Integer()) LIWC_article = db.Column(db.Integer()) LIWC_prep = db.Column(db.Integer()) LIWC_auxverb = db.Column(db.Integer()) LIWC_adverb = db.Column(db.Integer()) LIWC_conj = db.Column(db.Integer()) LIWC_negate = db.Column(db.Integer()) LIWC_verb = db.Column(db.Integer()) LIWC_adj = db.Column(db.Integer()) LIWC_compare = db.Column(db.Integer()) LIWC_interrog = db.Column(db.Integer()) LIWC_number = db.Column(db.Integer()) LIWC_quant = db.Column(db.Integer()) LIWC_affect = db.Column(db.Integer()) LIWC_posemo = db.Column(db.Integer()) LIWC_negemo = db.Column(db.Integer()) LIWC_anx = db.Column(db.Integer()) LIWC_anger = db.Column(db.Integer()) LIWC_sad = db.Column(db.Integer()) LIWC_social = db.Column(db.Integer()) LIWC_family = db.Column(db.Integer()) LIWC_friend = db.Column(db.Integer()) LIWC_female = db.Column(db.Integer()) LIWC_male = db.Column(db.Integer()) LIWC_cogproc = db.Column(db.Integer()) LIWC_insight = db.Column(db.Integer()) LIWC_cause = db.Column(db.Integer()) LIWC_discrep = db.Column(db.Integer()) LIWC_tentat = db.Column(db.Integer()) LIWC_certain = db.Column(db.Integer()) LIWC_differ = db.Column(db.Integer()) LIWC_percept = db.Column(db.Integer()) LIWC_see = db.Column(db.Integer()) LIWC_hear = db.Column(db.Integer()) LIWC_feel = db.Column(db.Integer()) LIWC_bio = db.Column(db.Integer()) LIWC_body = db.Column(db.Integer()) LIWC_health = db.Column(db.Integer()) LIWC_sexual = db.Column(db.Integer()) LIWC_ingest = db.Column(db.Integer()) LIWC_drives = db.Column(db.Integer()) LIWC_affiliation = db.Column(db.Integer()) LIWC_achiev = db.Column(db.Integer()) LIWC_power = db.Column(db.Integer()) LIWC_reward = db.Column(db.Integer()) LIWC_risk = db.Column(db.Integer()) LIWC_focuspast = db.Column(db.Integer()) LIWC_focuspresent = db.Column(db.Integer()) LIWC_focusfuture = db.Column(db.Integer()) LIWC_relativ = db.Column(db.Integer()) LIWC_motion = db.Column(db.Integer()) LIWC_space = db.Column(db.Integer()) LIWC_time = db.Column(db.Integer()) LIWC_work = db.Column(db.Integer()) LIWC_leisure = db.Column(db.Integer()) LIWC_home = db.Column(db.Integer()) LIWC_money = db.Column(db.Integer()) LIWC_relig = db.Column(db.Integer()) LIWC_death = db.Column(db.Integer()) LIWC_informal = db.Column(db.Integer()) LIWC_swear = db.Column(db.Integer()) LIWC_netspeak = db.Column(db.Integer()) LIWC_assent = db.Column(db.Integer()) LIWC_nonflu = db.Column(db.Integer()) LIWC_filler = db.Column(db.Integer()) MRC_kf_freq = db.Column(db.Float()) MRC_kf_nsamp = db.Column(db.Float()) MRC_tl_freq = db.Column(db.Float()) MRC_brown_freq = db.Column(db.Float()) MRC_fam = db.Column(db.Float()) MRC_conc = db.Column(db.Float()) MRC_imag = db.Column(db.Float()) MRC_meanc = db.Column(db.Float()) MRC_meanp = db.Column(db.Float()) MRC_aoa = db.Column(db.Float()) NRC_positive = db.Column(db.Integer()) NRC_negative = db.Column(db.Integer()) NRC_anger = db.Column(db.Integer()) NRC_anticipation = db.Column(db.Integer()) NRC_disgust = db.Column(db.Integer()) NRC_fear = db.Column(db.Integer()) NRC_joy = db.Column(db.Integer()) NRC_sadness = db.Column(db.Integer()) NRC_surprise = db.Column(db.Integer()) NRC_trust = db.Column(db.Integer()) S_visual = db.Column(db.Float()) S_auditory = db.Column(db.Float()) S_gustatory = db.Column(db.Float()) S_olfactory = db.Column(db.Float()) S_tactile = db.Column(db.Float())
class Base(db.Model): """ __abstract__设置为True,不会创建Base表 """ __abstract__ = True id = db.Column(db.Integer(), primary_key=True, autoincrement=True, comment="id") is_delete = db.Column(db.Boolean(), index=True, default=0, nullable=False, comment="软删除,0未删除,1删除") active = db.Column('is_active', db.Boolean(), index=True, default=0, nullable=False, comment="状态") created_at = db.Column(db.DateTime(), nullable=True, comment="创建时间") updated_at = db.Column(db.DateTime(), nullable=True, comment="修改时间") @classmethod def get_limit_all(cls): limit = int(request.args.get('limit', 10)) page = int(request.args.get('page', 1)) field = request.args.get('field', 'id') order = request.args.get('order', 'desc') _keyword = request.args.get('keyword', None) query = cls.query.filter(cls.is_delete == 0) query = cls._query_search(query, _keyword) if field and order: _obj = getattr(cls, field) if order == 'desc': query = query.order_by(_obj.desc()) else: query = query.order_by(_obj.asc()) total = query.with_entities(func.count(cls.id)).scalar() result = query.limit(limit).offset((page - 1) * limit).all() return total, result @classmethod def get_list_all(cls, is_sort=False): """ 不分页,is_sort 指定是否根据pid排序 :param is_sort: :return: """ _keyword = request.args.get('keyword', None) query = cls.query.filter(cls.is_delete == 0) query = cls._query_search(query, _keyword) total = query.with_entities(func.count(cls.id)).scalar() result = query.all() if _keyword: is_sort = False # 搜索的话,结果的 html设置为"" ,防止table渲染问题 result = array_sort_by_pid( result) if is_sort else list_result_with_html(result) return total, result @classmethod def get_all_for_select(cls, is_group=False): # is_group 是否分组 result = cls.query.filter_by().all() return array_sort_by_pid_whitespace(result) if is_group else result @classmethod def get_all(cls, is_group=False): # is_group 是否分组 result = cls.query.filter_by().all() return array_sort_to_tree(result) if is_group else result @classmethod def get_all_in_ids(cls, ids=list()): return cls.query.filter(cls.id.in_(ids), cls.is_delete == 0).all() def create(self, data): with db.auto_commit(): 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.set_attrs(data) else: self.set_attr(data) self.updated_at = time_now() def destroy(self): with db.auto_commit(): self.is_delete = 1 def set_attrs(self, attrs): for key, value in attrs.items(): if hasattr(self, key) and key != 'id': if value is None: setattr(self, key, 0) elif isinstance(value, str): setattr(self, key, value.strip()) else: setattr(self, key, value) def set_attr(self, attrs): for key, value in attrs.items(): if hasattr(self, key) and key != 'id' and key in get_request_field(): if isinstance(value, str): setattr(self, key, value.strip()) else: setattr(self, key, value) @classmethod def get_by_id(cls, id): return cls.query.filter_by(id=id).api_first_or_404() @classmethod def get_all_except_by_id(cls, id, is_sort=True): """ 查询除了某个id之外的所有结果 is_sort是根据pid排序,id和未激活的子集都会清除 :param id: :param is_sort: :return: """ result = cls.query.filter_by().filter(cls.id != id, cls.active == 1).all() return array_sort_by_pid_whitespace(result) if is_sort else result
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()
class Admin(Base, UserMixin): """ 管理员表 """ __tablename__ = "admins" name = db.Column(db.String(length=20), nullable=False, comment="用户名", index=True, unique=True) email = db.Column(db.String(length=20), nullable=False, comment="用户邮箱", index=True, unique=True) """ 属性名用 _password ,创建的字段未password """ _password = db.Column('password', db.String(length=128), nullable=False, comment="密码") nick_name = db.Column(db.String(length=20), default='', comment="昵称") chinese_name = db.Column(db.String(length=20), default='', comment="中文姓名") avatar = db.Column(db.String(length=100), default='', comment="头像") sex = db.Column(db.Boolean(), comment="性别", default=0) phone = db.Column(db.String(length=20), default='', comment="电话", index=True, unique=True) qq = db.Column(db.String(length=20), default='', comment="QQ") remarks = db.Column(db.String(length=255), default='', comment="备注") login_ip = db.Column(db.String(length=20), default='', comment="登录ip") login_time = db.Column(db.String(length=20), default='', comment="登录时间") login_count = db.Column(db.Integer(), default=0, comment="登录次数") is_super = db.Column(db.Boolean(), default=0, comment="是否创始人") role_id = db.Column(db.Integer(), db.ForeignKey("roles.id")) # role = db.relationship('Role', backref=db.backref("admins", lazy="dynamic"), lazy="select") role = db.relationship('Role') @classmethod def _query_search(cls, query, _keyword): if _keyword is not None: keyword = '%' + str(_keyword) + '%' return query.filter( or_(cls.name.like(keyword), cls.email.like(keyword), cls.nick_name.like(keyword), cls.chinese_name.like(keyword), cls.qq.like(keyword), cls.phone.like(keyword))) return query def update(self, data, edit_one_field=None): with db.auto_commit(): if not edit_one_field: if not data['password']: data.pop('password') self.set_attrs(data) else: self.set_attr(data) self.updated_at = time_now() # 属性的getter @property def password(self): return self._password # 属性的setter @password.setter def password(self, raw): self._password = generate_password_hash(raw) # 校验密码 def check_password(self, raw): return check_password_hash(self._password, raw) def set_password(self, raw): self.password = raw # get_id 返回str字符串,通过 admin 来做标识 def get_id(self): return 'admin.' + str(self.id)