Esempio n. 1
0
def info():
    """获取用户信息
    ---
    tags:
    - 用户
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    token = request.args.get('token')
    data = verify_token(token)
    if not data:
        return fail(401)
    user = Admin.query.get_or_404(data['user_id'])
    if not user:
        return fail(401)
    res = {'data': {'name': user.name, 'avatar': user.avatar}}
    return success(res)
Esempio n. 2
0
def get_user(id):
    """获取单个用户
    ---
    tags:
    - 用户
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    user = Admin.query.get_or_404(id)
    res = {'data': user.to_json()}
    return success(res)
Esempio n. 3
0
def logout():
    """登出
    ---
    tags:
    - 登录
    parameters:
    - in: body
      name: body
      required: true
      schema:
        $ref: '#/parameters/user_login'
    responses:
      200:
        examples:
          code: 0
          data: {'token': 'abcdefgh'}
          message: 'success'
      401:
        examples:
          code: 1
          message: 'fail'
    """
    data = verify_token(request.headers['Authorization'])
    cache.delete(data['user_id'])
    return success()
Esempio n. 4
0
def sysinfo():
    """获取系统信息
    ---
    tags:
    - 系统
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    res = {
        'data': {
            'cpu': get_cpu(),
            'sys': get_sysinfo(),
            'mem': get_memory(),
            'disk': get_disk(),
            'user': get_user()
        }
    }
    return success(res)
Esempio n. 5
0
def delete_operation_log():
    """删除操作日志,可批量删除
    ---
    tags:
    - 系统
    security:
    - api_key: []
    responses:
      200:
        description: 删除成功
        schema:
          type: object
          properties:
            code:
                type: int
            message:
                type: string
        examples:
          code: 0
          message: 'success'
    """
    data = json.loads(request.data)
    try:
        for item in data:
            log = OperationLog.query.get_or_404(item['id'])
            db.session.delete(log)
        db.session.commit()
        return success()
    except Exception:
        return fail(400)
Esempio n. 6
0
def create_user():
    """创建用户
    ---
    tags:
    - 用户
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    data = json.loads(request.data)
    Admin.create(**data)
    return success()
Esempio n. 7
0
def edit_user(id):
    """编辑用户
    ---
    tags:
    - 用户
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    data = json.loads(request.data)
    user = Admin.query.get_or_404(id)
    data['username'] = user.username
    if not data['password']:
        del data['password']
    user.update(**data)
    return success()
Esempio n. 8
0
def get_article(id):
    """获取单个资讯
    ---
    tags:
    - 资讯
    security:
    - api_key: []
    responses:
      200:
        description: 首页模块列表
        schema:
          $ref: '#/definitions/ApiResponse'
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    article = Article.query.get_or_404(id)
    res = {
        'data':
        article.to_json(fields=[
            'title', 'order', 'id', 'thumb_pic', 'content', 'module_name',
            'module_id'
        ])
    }
    return success(res)
Esempio n. 9
0
def delete_user(id):
    """删除用户
    ---
    tags:
    - 用户
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    user = Admin.query.get_or_404(id)
    if user:
        user.delete()
        return success()
    return fail(400)
Esempio n. 10
0
def login():
    """帐密登录
    ---
    tags:
    - 登录
    parameters:
    - in: body
      name: body
      required: true
      schema:
        $ref: '#/parameters/user_login'
    responses:
      200:
        examples:
          code: 0
          data: {'token': 'abcdefgh'}
          message: 'success'
      401:
        examples:
          code: 1
          message: 'fail'
    # 登录验证成功后生成一个token存在redis中,设置了有效期,并返回
    # :return: Flask Response
    """
    try:
        data = json.loads(request.data)
    except:
        return fail(401)
    user = Admin.query.filter_by(username=data['username']).first()
    if user and user.verify_password(data['password']):
        token = generate_token(user.id).decode()
        res = {'data': {'token': token}}
        cache.setex(user.id, current_app.config['EXPIRE_TIME'], token)
        return success(res)
    return fail(401)
Esempio n. 11
0
def expression_offical_add() -> ApiResult:
    """ 添加体验官
    ---
    tags:
    - 前台API
    parameters:
    - in: body
      name: body
      required: true
      schema:
        $ref: '#/parameters/add_expression_offical'
    responses:
      200:
        description: 添加成功
        examples:
          code: 0
          message: 'success'
    """

    data = request.form
    try:
        ExpressionOffical.create(**dict(data))
    except:
        return fail()
    return success()
Esempio n. 12
0
def users():
    """获取用户列表
    ---
    tags:
    - 用户
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    current_page = request.args.get('page') or 1
    per_page = request.args.get('limit') or 10
    pagination = Admin.query.paginate(int(current_page),
                                      per_page=int(per_page))
    result = [item.to_json() for item in pagination.items]
    res = {'data': {'items': result, 'total': pagination.total}}
    return success(res)
Esempio n. 13
0
def operation_logs():
    """获取操作日志
    ---
    tags:
    - 系统
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: object
            message:
                type: string
        examples:
          code: 0
          data: {'items': [{},{},{}], 'total': 200}
          message: 'success'
    """
    current_page = request.args.get('page', 1)
    per_page = request.args.get('limit', 10)
    path = request.args.get('path', '')
    input = request.args.get('input', '')
    query_result = OperationLog.query.filter(
        OperationLog.path.like('%' + path + '%')).filter(
            OperationLog.input.like('%' + input + '%')).order_by(
                OperationLog.id.desc())
    date = request.args.get('date')
    if date:
        zero, twenti_four = date + ' 00:00:00', date + ' 23:59:59'
        query_result = query_result.filter(
            OperationLog._created_at.between(zero, twenti_four))
    pagination = query_result.paginate(int(current_page),
                                       per_page=int(per_page))
    result = [item.to_json() for item in pagination.items]
    res = {'data': {'items': result, 'total': pagination.total}}
    return success(res)
Esempio n. 14
0
def upload():
    """上传文件
    ---
    tags:
    - 资讯
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    file = request.files['file']
    if file:
        now = time.time()
        date = time.strftime('%Y%m%d', time.localtime(now))
        filename = str(int(now)) + file.filename
        if not allowed_file(filename):
            return fail(415)
        if not CH_REGEX.search(filename):
            filename = secure_filename(filename)
        UPLOAD_PATH = os.path.join(current_app.config['UPLOAD_FOLDER'], date)
        os.makedirs(UPLOAD_PATH, exist_ok=True)
        filepath = os.path.join(UPLOAD_PATH, filename)
        file.save(filepath)

        res = {'data': {'filename': filename, 'fileurl': filepath}}
        return success(res)
    return fail(400)
Esempio n. 15
0
def github_login():
    """github oauth登录
        ---
        tags:
        - 登录
        parameters:
        - in: url
          name: code
          required: true
        responses:
          200:
            examples:
              code: 0
              data: {'token': 'abcdefgh'}
              message: 'success'
          401:
            examples:
              code: 1
              message: 'fail'
        # 使用code和secret前往github获取到一个token,使用token能获取到用户信息,这里直接使用
        # :return: Flask Response
        """
    code = request.args.get('code')
    if not code:
        return fail(401)
    params = {
        'code': code,
        'client_id': GITHUB_CLIENTID,
        'client_secret': GITHUB_CLIENTSECRET
    }
    res = requests.get(GITHUB_OAUTH_URL, params=params)
    # res.text: access_token=5fb2fde682eeae364bf72eed9e84cc1fa5ba9e1a&scope=user%3Aemail&token_type=bearer
    token = res.text.split('&')[0]
    res = requests.get(GITHUB_USER_URL + token)
    user = json.loads(res.content)
    user = Admin.query.filter_by(username=user['login']).first()
    if not user:
        return fail(401)
    token = generate_token(user.id).decode()
    res = {'data': {'token': token}}
    cache.setex(user.id, current_app.config['EXPIRE_TIME'], token)
    return success(res)
Esempio n. 16
0
def delete_article(id):
    """删除资讯
    ---
    tags:
    - 资讯
    security:
    - api_key: []
    responses:
      200:
        description: 删除成功
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    article = Article.query.get_or_404(id)
    if article:
        article.delete()
        return success()
    return fail(400)
Esempio n. 17
0
def module():
    """获取模块
    ---
    tags:
    - 资讯
    security:
    - api_key: []
    responses:
      200:
        description: 首页模块列表
        schema:
          $ref: '#/definitions/ApiResponse'
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    modules = Module.get(num='all', child_num=0)
    res = {'data': modules}
    return success(res)
Esempio n. 18
0
def search(word: str) -> ApiResult:
    """ 搜索接口
    ---
    tags:
    - 前台API
    parameters:
      - $ref: '#/parameters/current_page'
      - $ref: '#/parameters/search_word'
    responses:
      200:
        description: 搜索结果
        schema:
          $ref: '#/definitions/Article'
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
          meta:
           current_page: 1
           total: 10
    """
    current_page = request.args.get('page') or 1
    pagination = Article.query.filter(
        Article.title.like('%' + word + '%')).paginate(int(current_page),
                                                       per_page=5)
    articles = pagination.items
    total = pagination.total
    result = []
    for article in articles:
        item = article.to_json()
        result.append(item)

    res = {
        'data': result,
        'meta': {
            'current_page': int(current_page),
            'total': total
        }
    }
    return success(res)
Esempio n. 19
0
def create_article():
    """创建资讯
    ---
    tags:
    - 资讯
    security:
    - api_key: []
    responses:
      200:
        description: 首页模块列表
        schema:
          $ref: '#/definitions/ApiResponse'
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    data = json.loads(request.data)
    data['module_id'] = None if not isinstance(data['module_id'],
                                               int) else data['module_id']
    Article.create(**data)
    return success()
Esempio n. 20
0
def upload_avatar():
    """上传头像
    ---
    tags:
    - 用户
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    file = request.files['avatar']
    if file:
        now = time.time()
        filename = str(int(now)) + file.filename
        if not allowed_file(filename):
            return fail(415)
        if not CH_REGEX.search(filename):
            filename = secure_filename(filename)
        filepath = os.path.join(current_app.config['UPLOAD_FOLDER'], filename)
        file.save(filepath)

        res = {'data': {'filename': filename, 'fileurl': filepath}}
        return success(res)
    return fail(400)
Esempio n. 21
0
def home() -> ApiResult:
    """获取首页
    ---
    tags:
    - 前台API
    responses:
      200:
        description: 首页模块列表
        schema:
          $ref: '#/definitions/Module'
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    res = cache.get('home_json')
    if not res:
        modules = Module.get_item(10)
        result = []
        for m in modules:
            if m.template_id == 'i_5':
                item = m.to_json()

            else:
                item = m.to_json(2)
            for c in item['child']:
                if c['thumb_pic']:
                    c['thumb_pic'] = 'http://' + c['thumb_pic']
            result.append(item)

        res = {'data': result}

        cache.setex('home_json', current_app.config['EXPIRE_TIME'],
                    json.dumps(res))

    else:
        res = json.loads(res)
    return success(res)
Esempio n. 22
0
def articles():
    """获取资讯列表
    ---
    tags:
    - 资讯
    security:
    - api_key: []
    responses:
      200:
        description: 获取成功
        schema:
          type: object
          properties:
            code:
                type: int
            data:
                type: array
                $ref: '#/definitions/Module'
            message:
                type: string
        examples:
          code: 0
          data: [{}, {}]
          message: 'success'
    """
    current_page = request.args.get('page') or 1
    per_page = request.args.get('limit') or 10
    module = request.args.get('module')
    if module and not module == 'all':
        pagination = Article.query.filter_by(module_id=module).paginate(
            int(current_page), per_page=int(per_page))
    else:
        pagination = Article.query.paginate(int(current_page),
                                            per_page=int(per_page))
    result = [item.to_json() for item in pagination.items]
    res = {'data': {'items': result, 'total': pagination.total}}
    return success(res)