def get(self, request, format=None):
        payment = Payment.objects.all().using('default').order_by(
            'id')  # TODO orderby something logical
        paginator = PageNumberPagination()
        paginator.max_page_size = 100
        paginator.page_size_query_param = 'page_size'

        result_page = paginator.paginate_queryset(payment, request)
        serializer = PaymentSerializer(result_page,
                                       many=True,
                                       context={'request': request})

        current_page = paginator.page.number
        total_pages = int(str(paginator.page).split(" ")[3].split(">")[0])
        page_size = len(serializer.data)
        previous_page = str(paginator.get_previous_link())
        next_page = str(paginator.get_next_link())

        return JsonResponse(data={
            'page_size': page_size,
            'results': serializer.data,
            'next_page': next_page,
            'previous_page': previous_page,
            'current_page': current_page,
            'total_pages': total_pages
        },
                            status=200,
                            safe=False)
Exemple #2
0
    def get(self, request, format="JSON"):
        try:
            per_list = Permission.objects.filter()
            page = PageNumberPagination()  # 生成分页器对象
            page.page_size = 100  # 设置每页的条数
            # page.page_query_param = 'page'  # url中查询第几页的key默认为'page
            # page.page_size_query_param = 'limit'  # url中这一页数据的条数的key, 默认为None
            page.max_page_size = 50  # 每页的最大数据条数

            page_list = page.paginate_queryset(per_list, request,
                                               self)  # 生成这一页的数据列表
            # page_list.
            # 将这一页的数据列表序列化
            # return Response(ret.data)  # 返回查到的数据列表
            ret = PowerSerializer(page_list, many=True)
            for data in ret.data:
                data['children'] = []

            for data in ret.data:
                if data['parent']:
                    for vdata in ret.data:
                        if vdata['id'] == data['parent']:
                            vdata['children'].append((data))
            Per = []
            for data in ret.data:
                if data['parent'] == None:
                    Per.append(data)
            jsondata = {}
            jsondata['code'] = 20000
            jsondata['total'] = page.page.paginator.count
            jsondata['items'] = Per
            return Response(jsondata)
        except:
            return Response({'code': 0, 'msg': '设备列表获取失败'})
Exemple #3
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
        }
    })
Exemple #4
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
            }
        })
Exemple #5
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,
        }
    })
Exemple #6
0
    def get(self, request, format="JSON"):
        user = request.user
        try:
            query_params = list(request.query_params.keys())
            kwargs = {}
            if 'name' in query_params:
                kwargs['name__contains'] = request.query_params['name']
            dep_list = Department.objects.filter(**kwargs)
            page = PageNumberPagination()  # 生成分页器对象
            page.page_size = 200  # 设置每页的条数

            page.max_page_size = 50  # 每页的最大数据条数

            page_list = page.paginate_queryset(dep_list, request,
                                               self)  # 生成这一页的数据列表
            # page_list.
            # 将这一页的数据列表序列化
            # return Response(ret.data)  # 返回查到的数据列表
            ret = OrgSerializer(page_list, many=True)
            for data in ret.data:
                data['children'] = []

            for data in ret.data:
                if data['parent']:
                    for vdata in ret.data:
                        if vdata['id'] == data['parent']['id']:
                            vdata['children'].append((data))
            Per = []
            for data in ret.data:
                for vdata in ret.data:
                    if 'children' in vdata and len(vdata['children']) == 0:
                        vdata.pop('children')
                if data['id'] == user.dept.id:
                    Per.append(data)

            jsondata = {}
            jsondata['code'] = 20000
            jsondata['total'] = page.page.paginator.count
            jsondata['items'] = Per
            return Response(jsondata)
        except:
            return Response({'code': 0, 'msg': '设备列表获取失败'})
Exemple #7
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
            }
        })