我正在尝试创建一个我正在使用Django作为后端的Android应用程序。
我有一个列表页面,向我展示了我的应用程序中可用的所有产品。假设我的应用程序中有2000个产品可用,因此希望将这些数据分批发送到10或20个批次。
所以我对如何批量发送数据感到有点困惑。 尽可能提供一些示例代码。 提前致谢
@csrf_exempt
def ShowProducts(request):
pro_object = Product.objects.all()
data = pro_object
return JsonResponse({'data':data})
答案 0 :(得分:1)
您可以使用Django Paginator
来实现这一目标,有关详细信息,请查看此处的文档Pagination
在您的情况下,您可以执行以下操作:
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.http import JsonResponse
def show_products(request):
products = Product.objects.all()
paginator = Paginator(products, 10) # to show 10 products
page = request.GET.get('page')
try:
products = paginator.page(page)
except PageNotAnInteger:
products = paginator.page(1)
except EmptyPage:
products = paginator.page(paginator.num_pages)
return JsonResponse({'data': products.object_list})
答案 1 :(得分:0)
我的建议是在前端呼叫中使用分页如下: -
views.py
class subProjectsList(APIView):
def get(self, request, format=None):
pageNo = int(request.GET['pageNo'])
perPage = int(request.GET['perPage'])
start_limit = (pageNo-1) * perPage
end_limit = pageNo * perPage
productsCount = Product.objects.all().count()
products = Product.objects.all()[start_limit:end_limit]
data = {'success':True,'msg':'YourMsg','rows':result,'count':allSubProjectsCount}
return HttpResponse(json.dumps(data,cls=DjangoJSONEncoder),content_type="application/json")
在前端你可以编写类似这样的代码(Angular JS): -
var pageNo = 1;
var perPage = jo teri marzi;
$scope.result = [];
angular.forEach(response, function (value) {
$scope.result.push(value);
});
$scope.totalCount = response.count;
if($scope.totalCount > 0){
if(Math.ceil($scope.totalCount/perPage) !== pageNo){
pageNo = pageNo + 1;
callthemethodAgain();
}
}
答案 2 :(得分:0)
您可以使用以下其中一项
1. Django休息
http://www.django-rest-framework.org/
2.否则你可以使用django serializers + django pagination
https://docs.djangoproject.com/en/1.10/topics/serialization/
https://docs.djangoproject.com/en/1.10/topics/pagination/