Пример #1
0
class AdminAuth(Base, MixinModelJSONSerializer):
    """权限模快"""
    id = db.Column(db.Integer, primary_key=True, comment="权限自增ID")
    auth_name = db.Column(db.String(100), comment="权限名称")
    url = db.Column(db.String(200), comment="权限地址")
    auth = db.relationship('Module')
    sec_module_id = db.Column(db.Integer, db.ForeignKey('sec_module.id'))
    module = db.relationship('SecModule', uselist=False)
Пример #2
0
class Resume(Base, MixinModelJSONSerializer):
    __tablename__ = 'resume'

    id = db.Column(db.Integer, primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = db.relationship('User', uselist=False)
    job_experiences = db.relationship('JobExperience')
    edu_experiences = db.relationship('EduExperience')
    project_experiences = db.relationship('ProjectExperience')

    def profile(self):
        pass
Пример #3
0
class Module(Base, MixinModelJSONSerializer):
    """三级菜单"""
    id = db.Column(db.Integer, primary_key=True, comment="自增ID")
    name = db.Column(db.String(100), unique=True, comment="角色名")
    auth_id = db.Column(db.Integer, db.ForeignKey('admin_auth.id'))
    sec_module_id = db.Column(db.Integer, db.ForeignKey('sec_module.id'))
    module = db.relationship('SecModule', uselist=False)
Пример #4
0
class Job(Base, MixinModelJSONSerializer):
    __tablename__ = 'job'

    id = db.Column(db.Integer, primary_key=True)
    # 职位名称
    name = db.Column(db.String(24))
    salary_low = db.Column(db.Integer, nullable=False)
    salary_high = db.Column(db.Integer, nullable=False)
    location = db.Column(db.String(24))
    description = db.Column(db.String(1500))
    # 职位标签,多个标签用逗号隔开,最多10个
    tags = db.Column(db.String(128))
    experience_requirement = db.Column(db.String(32))
    degree_requirement = db.Column(db.String(32))
    is_fulltime = db.Column(db.Boolean, default=True)
    # 是否在招聘
    is_open = db.Column(db.Boolean, default=True)
    company_id = db.Column(db.Integer,
                           db.ForeignKey('user.id', ondelete='CASCADE'))
    company = db.relationship('User',
                              uselist=False,
                              backref=db.backref('job', lazy='dynamic'))
    views_count = db.Column(db.Integer, default=0)
    is_disable = db.Column(db.Boolean, default=False)

    @property
    def tag_list(self):
        return self.tags.split(',')

    @property
    def current_user_is_applied(self):
        d = Delivery.query.filter_by(job_id=self.id,
                                     user_id=g.user.uid).first()
        return d is not None
Пример #5
0
class CompanyDetail(Base, MixinModelJSONSerializer):
    __tablename__ = 'company_detail'

    id = db.Column(db.Integer, primary_key=True)
    logo = db.Column(db.String(256), nullable=False)
    site = db.Column(db.String(128), nullable=False)
    location = db.Column(db.String(24), nullable=False)
    # 一句话描述
    description = db.Column(db.String(100))
    # 关于我们,公司详情描述
    about = db.Column(db.String(1024))
    # 公司标签,多个标签用逗号隔开,最多10个
    tags = db.Column(db.String(128))
    # 公司技术栈,多个技术用逗号隔开,最多10个
    stack = db.Column(db.String(128))
    # 团队介绍
    team_introduction = db.Column(db.String(256))
    # 公司福利,多个福利用分号隔开,最多 10 个
    welfares = db.Column(db.String(256))
    # 公司领域
    field = db.Column(db.String(128))
    # 融资进度
    finance_stage = db.Column(db.String(128))
    user_id = db.Column(db.Integer,
                        db.ForeignKey('user.id', ondelete='SET NULL'))
    user = db.relationship('User',
                           backref=db.backref('company_detail', uselist=False))
Пример #6
0
class EduExperience(Base, MixinModelJSONSerializer):
    __tablename__ = 'edu_experience'

    id = db.Column(db.Integer, primary_key=True)
    school = db.Column(db.String(32), nullable=False)
    # 所学专业
    specialty = db.Column(db.String(32), nullable=False)
    degree = db.Column(db.String(16))
    resume_id = db.Column(db.Integer, db.ForeignKey('resume.id'))
    resume = db.relationship('Resume', uselist=False)
Пример #7
0
class JobExperience(Base, MixinModelJSONSerializer):
    __tablename__ = 'job_experience'

    id = db.Column(db.Integer, primary_key=True)
    begin_at = db.Column(db.DateTime)
    end_at = db.Column(db.DateTime)
    company = db.Column(db.String(32), nullable=False)
    city = db.Column(db.String(32), nullable=False)
    resume_id = db.Column(db.Integer, db.ForeignKey('resume.id'))
    resume = db.relationship('Resume', uselist=False)
Пример #8
0
class ProjectExperience(Base, MixinModelJSONSerializer):
    __tablename__ = 'preject_experience'

    id = db.Column(db.Integer, primary_key=True)
    begin_at = db.Column(db.DateTime)
    end_at = db.Column(db.DateTime)
    name = db.Column(db.String(32), nullable=False)
    # 在项目中扮演的角色
    role = db.Column(db.String(32))
    # 多个技术用逗号隔开
    technologys = db.Column(db.String(64))
    resume_id = db.Column(db.Integer, db.ForeignKey('resume.id'))
    resume = db.relationship('Resume', uselist=False)
Пример #9
0
class Role(Base, MixinModelJSONSerializer):
    """角色模块"""
    id = db.Column(db.Integer, primary_key=True, comment="自增ID")
    name = db.Column(db.String(100), unique=True, comment="角色名")
    auth = db.Column(db.String(255), comment="权限列表")
    role = db.relationship("User", backref='role')
Пример #10
0
class User(Base, MixinModelJSONSerializer):
    id = db.Column(db.Integer, primary_key=True, comment="用户自增ID")
    auth = db.Column(db.SmallInteger, default=100, comment="默认组")
    username = db.Column(db.String(24),
                         unique=True,
                         nullable=True,
                         comment="用户名")
    nickname = db.Column(db.String(24),
                         unique=True,
                         nullable=False,
                         comment="用户昵称")
    email = db.Column(db.String(30), unique=True, nullable=False)
    role_id = db.Column(db.Integer, db.ForeignKey('role.id'), comment="用户权限组")
    _image = db.Column('image', db.String(50), comment="图片地址")
    _password = db.Column('password',
                          db.String(100),
                          nullable=True,
                          comment="用户密码")
    # 根据用户在网站上填写的内容生成的简历
    collect_jobs = db.relationship('Job', secondary=user_job)
    # 用户上传的简历或者简历链接
    resume = db.relationship('Resume', uselist=False)
    # 企业用户详情
    detail = db.relationship('CompanyDetail', uselist=False)

    @property
    def image(self):
        return self._image

    @image.setter
    def image(self, filename):
        self._image = filename

    def _set_fields(self):
        """
        数据序列化要隐藏的字段
        """
        self._exclude = ['password']

    @property
    def password(self):
        return self._password

    @password.setter
    def password(self, raw):
        self._password = generate_password_hash(raw)

    def check_password(self, raw):
        if not self._password:
            return False
        return check_password_hash(self._password, raw)

    @staticmethod
    def register_by_username(username, password, nickname):
        with db.auto_commit():
            user = User()
            user.nickname = nickname
            user.username = username
            user.password = password
            db.session.add(user)

    @staticmethod
    def verify(username, password):
        """
        验证用户的作用域
        """
        user = User.query.filter_by(username=username).first_or_404()
        if not user:
            raise UserNotExistException(message="当前用户不存在 ~ !")
        if not user.check_password(password):
            raise AuthFailed()
        is_auth = {
            777: admin_scope,
            755: company_scope,
            707: merchants_cope,
            706: property_scope,
            705: literacy_scope,
            100: user_scope
        }
        scope = is_auth.get(user.auth, get_defualt)()
        return {'uid': user.id, 'scope': scope}

    @staticmethod
    def change_password(old_password, new_password):
        """
        修改密码
        """
        uid = g.user.uid
        with db.auto_commit():
            user = User.query.get(uid)
            if not user:
                return False
            if user.check_password(old_password):
                user.password = new_password
                return True
            return False

    @staticmethod
    def reset_password(token, new_password):
        s = Serializer(current_app.config['SECRET_KEY'])
        try:
            data = s.loads(token.encode('utf-8'))
        except:
            return False
        uid = data.get('id')
        with db.auto_commit():
            user = User.query.get(uid)
            user.password = new_password
        return True

    def generate_token(self, expiration=600):
        s = Serializer(current_app.config['SECRET_KEY'], expiration)
        return s.dumps({'id': self.id}).decode('utf-8')