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 } })
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 } })
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, } })
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 } })