Django中使用分页器
场景描述
有一个get请求,如果传递的有id,则返回具体某一个菜品的信息,如果没有,则返回当前默认分页的内容,获取用户传递的分页参数进行查询。
分页说明
如果数据量很大,几百上千条,一般是需要使用分页器的,这样可以对用户,对服务器,对网络都比较友好。
如果当前框架不提供分页查询功能,也就是我们需要手动设置page
和pageSize
去进行分页查询,获取到全部数据后进行切割,返回具体的某一条数组信息即可。
但是在django中已经给我们提供了分页的功能,使用起来非常方便
django中使用分页
from django.core.paginator import Paginator
from django.http import JsonResponse
def get(self, request):
id = request.GET.get('id')
if id is not None:
dish = Dish.objects.filter(id=id).first()
obj = {
'id': dish.id,
'name': dish.dish_name,
'price': dish.dish_price,
'desc': dish.dish_desc,
'cover': dish.dish_img,
'order_count': dish.order_count,
'type': dish.dish_type_id
}
return JsonResponse({"DishInfo": obj})
page_num = request.GET.get('page', 1)
page_size = request.GET.get('page_size', 10)
dishes = Dish.objects.select_related('dish_type').all()
paginator = Paginator(dishes, page_size)
page = paginator.get_page(page_num)
dish_list = []
for dish in page:
obj = {
'id': dish.id,
'name': dish.dish_name,
'price': dish.dish_price,
'desc': dish.dish_desc,
'cover': dish.dish_img,
'order_count': dish.order_count,
'type': dish.dish_type.name
}
dish_list.append(obj)
return JsonResponse({
"status": "success",
"data": {
"dish_list": dish_list,
"total": paginator.count,
"page_num": page_num,
"page_size": page_size
}
})