Beispiel #1
0
    def post(self):
        kwargs = request.json
        kwargs['user'] = current_user
        Asset.create(**kwargs)

        return flask.make_response(
            json.dumps({'message': 'File uploaded successfully'}), 200,
            {'Content-Type': 'application/json'})
Beispiel #2
0
    def cover(self):
        if self.cover_id and len(self.cover_id) == 12:
            asset = Asset.objects(_id=ObjectId(self.cover_id)).first()
            if asset and asset.deleted == 0:
                return asset

        asset = Asset.objects(target_id=str(self._id), asset_type=5,
                              deleted=0).first()
        if asset and asset.deleted == 0:
            return asset
        return None
Beispiel #3
0
def asset_ajx_list():
    page = int(request.args.get('page', 1))
    per_page = int(request.args.get('per_page', 10))
    target_id = request.args.get('target_id', '')
    asset_type = int(request.args.get('asset_type', 1))
    cover_id = request.args.get('cover_id', '')

    meta = {}
    query = {}
    if target_id:
        query['target_id'] = target_id
    query['asset_type'] = asset_type
    query['deleted'] = 0

    try:
        data = Asset.objects(**query).order_by('-created_at').paginate(
            page=page, per_page=per_page)
        total_count = Asset.objects(**query).count()

        # 过滤数据
        fields = []
        for i, d in enumerate(data.items):
            thumb_dict = d.get_thumb_path()
            thumb_url = ''
            is_cover = False
            if cover_id == str(d._id):
                is_cover = True
            if thumb_dict:
                thumb_url = thumb_dict['sm']
            field = {
                '_id': str(d._id),
                'name': d.name,
                'path': d.path,
                'asset_type': d.asset_type,
                'domain': d.domain,
                'thumb_url': thumb_url,
                'is_cover': is_cover
            }
            fields.append(field)

        meta['rows'] = fields
    except (Exception) as e:
        meta['rows'] = []
        total_count = 0

    meta['total_count'] = total_count
    meta['page'] = page
    meta['per_page'] = per_page

    return jsonify(code=0, message='success!', data=meta)
Beispiel #4
0
 def save(self, **param):
     data = self.data
     asset_ids = data['asset_ids']
     if data['title']:
         if Column.objects(title=data['title']).first():
             raise ValueError('栏目信息已存在!')
     data['user_id'] = param['user_id']
     data.pop('id')
     data.pop('asset_ids')
     data.pop('asset_type')
     item = Column(**data)
     ok = item.save()
     if not ok:
         raise ValueError('保存失败!')
     # 更新附件
     if asset_ids:
         asset_arr = asset_ids.strip().split(',')
         for asset_id in asset_arr:
             try:
                 asset = Asset.objects(_id=ObjectId(asset_id)).first()
                 if asset:
                     asset.update(target_id=str(item._id))
             except (Exception) as e:
                 continue
     return item
Beispiel #5
0
def asset_list():
    ret = [{
        "id": asset.id,
        "name": asset.name,
        "disk_size": asset.disk_size,
        "cpu": asset.cpu
    }for asset in Asset.list()]
    return jsonify(ret)
Beispiel #6
0
 def mark_recovery(self):
     ok = super(Brand, self).update(deleted=0)
     if ok:
         # 恢复附件
         assets = Asset.objects(target_id=str(self._id),
                                asset_type=5,
                                deleted=1)
         for item in assets:
             item.update(deleted=0)
Beispiel #7
0
 def mark_delete(self):
     ok = super(Column, self).update(deleted=1)
     if ok:
         # 删除附件
         assets = Asset.objects(target_id=str(self._id),
                                asset_type=7,
                                deleted=0)
         for item in assets:
             item.mark_delete()
Beispiel #8
0
 def delete(self, asset_id):
     try:
         asset = Asset.find_one(id=int(asset_id), user_id=current_user.id)
         asset.delete()
         return flask.make_response(
             json.dumps({'message': 'File deleted successfully'}), 200,
             {'Content-Type': 'application/json'})
     except NoResultFound:
         return flask.make_response(
             json.dumps({'message': 'Access Denied'}), 403,
             {'Content-Type': 'application/json'})
Beispiel #9
0
def asset_submit():
    meta = metaInit.copy()
    id = request.args.get('id', None)
    meta['data'] = None
    if id:
        item = Asset.objects(_id=ObjectId(id)).first()
        if not item:
            return jsonify(success=False, message='内容不存在!')
        meta['data'] = item

    form = SaveForm()

    meta['referer_url'] = request.environ.get('HTTP_REFERER') if request.environ.get('HTTP_REFERER') else ''
    
    return render_template('admin/asset/submit.html', meta=meta, form=form)
Beispiel #10
0
def asset_ajx_del():
    id = request.args.get('id', '')
    if not id:
        return jsonify(code=500, message='缺少请求参数!')

    try:
        asset = Asset.objects(_id=ObjectId(id)).first()
        if not asset:
            return jsonify(code=500, message='内容不存在!')
        if not g.is_edit:
            return jsonify(code=500, message='没有权限!')

        ok = asset.mark_delete()
        return jsonify(code=0, message='success')
    except (Exception) as e:
        return jsonify(code=500, message=str(e))
Beispiel #11
0
def asset_recovery():
    meta = {}

    ids = request.values.get('ids', '')
    type = request.values.get('type', 1)
    if not ids:
        return jsonify(success=False, message='缺少请求参数!')
    
    try:
        arr = ids.split(',')
        for d in arr:
            item = Asset.objects(_id=ObjectId(d)).first()
            item.mark_recovery() if item else None
    except(Exception) as e:
        return jsonify(success=False, message=str(e))

    return jsonify(success=True, message='操作成功!', data={'ids': ids, 'type':type}, redirect_to=url_for('admin.asset_list'))
Beispiel #12
0
def asset_list():
    meta = metaInit.copy()
    query = {}
    page = force_int(request.args.get('page', 1))
    per_page = force_int(request.args.get('per_page', 100))
    assetType = force_int(request.args.get('asset_type', 0))
    status = force_int(request.args.get('status', 0))
    deleted = force_int(request.args.get('deleted', 0))
    kind = force_int(request.args.get('kind', 0))
    domain = request.args.get('domain', '')

    t = force_int(request.args.get('t', 1), 1)
    q = request.args.get('q', '')

    if q:
        if t==1:
            query['_id'] = ObjectId(q)
        if t==2:
            query['name'] = {"$regex": q.strip()}

    if assetType:
        query['asset_type'] = assetType

    if domain:
        query['domain'] = domain

    if status == -1:
        meta['css_disable'] = 'active'
        query['status'] = 0
    if status == 1:
        query['status'] = 1
        meta['css_enable'] = 'active'
    else:
        pass

    if deleted == 1:
        query['deleted'] = 1
        meta['css_deleted'] = 'active'
    else:
        query['deleted'] = 0

    if not status and not deleted:
        meta['css_all'] = 'active'
    else:
        meta['css_all'] = ''

    page_url = url_for('admin.asset_list', page="#p#", q=q, t=t, kind=kind, status=status)

    data = Asset.objects(**query).order_by('-created_at').paginate(page=page, per_page=per_page)
    total_count = Asset.objects(**query).count()

    # 过滤数据
    for i, d in enumerate(data.items):
        data.items[i]._id = str(d._id)
        data.items[i].thumb = d.get_thumb_path()

    meta['data'] = data.items
    meta['total_count'] = total_count

    pager = Pager(page, per_page, total_count, page_url)
    meta['pager'] = pager.render_view()

    return render_template('admin/asset/list.html', meta=meta)
Beispiel #13
0
def handle_file(f, **param):
    result = {'success': 0, 'message': ''}
    if not f:
        result['message'] = '文件不存在!'
        return result

    bucket_name = current_app.config['QN_BUCKET_NAME']
    # 文件名
    fname = f.filename
    # 获取文件后缀
    ext = fname.rsplit('.', 1)[1]

    mime = f.mimetype

    size = f.content_length

    blob = f.read()
    size = len(blob)

    user_id = force_int(param['user_id'], 0)
    target_id = param['target_id']
    asset_type = force_int(param['asset_type'], 1)
    evt = param['evt']
    #上传到七牛后保存的文件名
    asset_name = gen_asset_name(asset_type)

    # 文件路径
    path = "%s/%s/%s/%s" % (bucket_name, asset_name, time.strftime("%y%m%d"),
                            gen_mongo_id())

    # 上传至七牛
    qnResult = up_qiniu(blob, path)

    if not qnResult['success']:
        result['message'] = qnResult['message']
        return result

    row = {
        'name': fname,
        'mime': mime,
        'ext': ext,
        'size': size,
        'path': path,
        'asset_type': asset_type,
        'domain': asset_name,
        'target_id': target_id,
        'user_id': user_id
    }

    if evt == 1:
        # 保存至asset表
        try:
            asset = Asset(**row)
            ok = asset.save()
            if not ok:
                result['message'] = '保存附件失败'
                return result

            row['_id'] = str(asset._id)

        except (Exception) as e:
            result['message'] = str(e)
            return result

    result['success'] = 1
    result['data'] = row
    return result