Example #1
0
def list_user_info_endpoint(request):
    """
    列出所有用户,当前操作对象为超级管理员时,可指定某个用户名,不批定则列出所有用户
    普通用户则列出自身帐户信息,以及所有子帐户信息
    :param request:
    :return:
    """
    username = request.GET.get('username', None)
    req_user = request.user

    users = User.objects. \
        select_related('profile'). \
        select_related('capacity_quota'). \
        select_related('bandwidth_quota'). \
        select_related('keys')

    if req_user.is_superuser:
        if username:
            user_list = users.filter(
                Q(username__contains=username)
                | Q(profile__parent_uid=username))
        else:
            user_list = users.all()
    else:
        username = req_user.username
        user_list = users.filter(
            Q(username=username) | Q(profile__parent_uid=username)
            | Q(profile__root_uid=username))

    try:
        cur_page = int(request.GET.get('page', 1))
        size = int(request.GET.get('size', settings.PAGE_SIZE))
    except ValueError:
        cur_page = 1
        size = settings.PAGE_SIZE

    page = PageNumberPagination()
    page.page_size = size
    page.number = cur_page
    page.max_page_size = 20
    ret = page.paginate_queryset(user_list.order_by('-id'), request)
    ser = UserSerialize(ret, many=True)
    return Response({
        'code': 0,
        'msg': 'success',
        'data': ser.data,
        'page_info': {
            'record_count': len(users),
            'page_size': size,
            'current_page': page.page.number
        }
    })
Example #2
0
    def get(self, request):
        bucket_obj = self.model.objects.\
            select_related('user').\
            select_related('user__profile'). \
            select_related('bucket_region')
        # 管理员查询所有用户的bucket,非管理员仅可查看自己的bucket
        if not request.user.is_superuser:
            # 查询已授到用户的所有桶列表
            authorized_bucket_list = BucketAcl.objects.filter(user=request.user).values_list('bucket_id', flat=True)
            # authorized_bucket_list = [i[0] for i in authorized_bucket]
            self.queryset = bucket_obj.filter(
                Q(user=request.user) |
                Q(bucket_id__in=authorized_bucket_list)
            )
        else:
            kw = request.GET.get('keyword', None)
            if kw:
                self.queryset = bucket_obj.filter(
                    Q(user__first_name=kw) |
                    Q(user__username=kw) |
                    Q(name__contains=kw) |
                    Q(bucket_region__name=kw)
                )
            else:
                self.queryset = bucket_obj.all()
        # 获取分页参数并进行分页
        try:
            cur_page = int(request.GET.get('page', 1))
            page_size = int(request.GET.get('size', settings.PAGE_SIZE))
        except ValueError:
            cur_page = 1
            page_size = settings.PAGE_SIZE

        page = PageNumberPagination()
        page.page_size = page_size
        page.number = cur_page
        page.max_page_size = 20

        ret = page.paginate_queryset(self.queryset.order_by('-bucket_id'), request)
        ser = BucketSerialize(ret, many=True)
        # 返回计求数据
        return Response({
            'code': 0,
            'msg': 'success',
            'data': ser.data,
            'page_info': {
                'record_count': self.queryset.count(),
                'page_size': page_size,
                'current_page': page.number
            }
        })
Example #3
0
def list_objects_endpoint(request):
    """
    列出桶内的所有文件对象和目录
    """
    path = request.GET.get('path', None)
    bucket_name = request.GET.get('bucket_name', None)

    try:
        b = Buckets.objects.get(name=bucket_name)
    except Buckets.DoesNotExist:
        raise NotFound(detail='not found bucket')

    verify_bucket_owner_and_permission(request, PermAction.R, b)
    res = Objects.objects.select_related('bucket').select_related(
        'owner').filter(bucket=b)

    if path:
        res = res.filter(root=path.replace(',', '/'))
    else:
        res = res.filter(Q(root=None) | Q(root=''))

    try:
        cur_page = int(request.GET.get('page', 1))
        size = int(request.GET.get('size', settings.PAGE_SIZE))
    except ValueError:
        cur_page = 1
        size = settings.PAGE_SIZE

    page = PageNumberPagination()
    page.page_size = size
    page.number = cur_page
    page.max_page_size = 20
    ret = page.paginate_queryset(res.order_by('type', '-obj_id'), request)
    ser = ObjectsSerialize(ret, many=True)

    return Response({
        'code': 0,
        'msg': 'success',
        'data': ser.data,
        'page_info': {
            'record_count': len(res),
            'pag_size': size,
            'current_page': cur_page,
        }
    })
Example #4
0
    def get(self, request):
        obj = Order.objects.select_related('user').select_related('plan')
        order_no = request.GET.get('order_no', None)
        if order_no:
            data = obj.filter(no=order_no)
            if data and request.user.is_superuser is not None:
                data = data.filter(user=request.user)
        else:
            data = obj.all() if request.user.is_superuser else obj.filter(user=request.user)

        self.queryset = data.order_by('-id')

        try:
            cur_page = int(request.GET.get('page', 1))
            size = int(request.GET.get('size', settings.PAGE_SIZE))
        except ValueError:
            cur_page = 1
            size = settings.PAGE_SIZE

        page = PageNumberPagination()
        page.page_size = size
        page.number = cur_page
        page.max_page_size = 20
        ret = page.paginate_queryset(self.queryset, request)
        ser = OrderSerialize(ret, many=True)

        return Response({
            'code': 0,
            'msg': 'success',
            'data': ser.data,
            'page_info': {
                'record_count': len(ser.data),
                'page_size': size,
                'current_page': page.page.number
            }
        })