分页器
# 查所有,才需要分页
from rest_framework.generics import ListAPIView
# 内置三种分页方式
from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination,CursorPagination
'''
PageNumberPagination
page_size:每页显示的条数
'''
class MyPageNumberPagination(PageNumberPagination):
#http://127.0.0.1:8000/api/books2/?aaa=1&size=6
page_size=3 #每页条数
page_query_param='aaa' #查询第几页的key
page_size_query_param='size' # 每一页显示的条数
max_page_size=5 # 每页最大显示条数
# class MyLimitOffsetPagination(LimitOffsetPagination):
# default_limit = 3 # 每页条数
# limit_query_param = 'limit' # 往后拿几条
# offset_query_param = 'offset' # 标杆
# max_limit = 5 # 每页最大几条
class MyCursorPagination(CursorPagination):
cursor_query_param = 'cursor' # 每一页查询的key
page_size = 2 #每页显示的条数
ordering = '-id' #排序字段
# class BookView(ListAPIView):
# # queryset = models.Book.objects.all().filter(is_delete=False)
# queryset = models.Book.objects.all()
# serializer_class = BookModelSerializer
# #配置分页
# pagination_class = MyCursorPagination
# 如果使用APIView分页
from utils.throttling import MyThrottle
class BookView(APIView):
# throttle_classes = [MyThrottle,]
def get(self,request,*args,**kwargs):
book_list=models.Book.objects.all()
# 实例化得到一个分页器对象
page_cursor=MyPageNumberPagination()
book_list=page_cursor.paginate_queryset(book_list,request,view=self)
next_url =page_cursor.get_next_link()
pr_url=page_cursor.get_previous_link()
# print(next_url)
# print(pr_url)
book_ser=BookModelSerializer(book_list,many=True)
return Response(data=book_ser.data)
setting中的设置全局:
REST_FRAMEWORK={
'DEFAULT_THROTTLE_CLASSES': (
'utils.throttling.MyThrottle',
),
'DEFAULT_THROTTLE_RATES': {
'luffy': '3/m' # key要跟类中的scop对应
},
'PAGE_SIZE': 2,
}
坑
# 如果使用APIView分页
from utils.throttling import MyThrottle
class BookView(APIView):
# throttle_classes = [MyThrottle,]
def get(self,request,*args,**kwargs):
book_list=models.Book.objects.all()
# 实例化得到一个分页器对象
page_cursor=MyPageNumberPagination()
book_list=page_cursor.paginate_queryset(book_list,request,view=self)
next_url =page_cursor.get_next_link()
pr_url=page_cursor.get_previous_link()
print(next_url)
print(pr_url)
dic = {}
dic.values()
book_ser=BookModelSerializer(book_list,many=True)
li=book_ser.data
for i in li:
for k in i:
print(i.get(k))
print(i.values())
# li.get('OrderedDict')
# li.update()
# li['next_url'] = next_url
# 编译器也是牛逼,list的类型 你搞个毛的dict的方法出来
li.append(next_url)
li.append(pr_url)
return Response(data=li)
使用自带分页器:
class BookViewpage(ListAPIView):
# queryset = models.Book.objects.all().filter(is_delete=False)
queryset = models.Book.objects.all()
serializer_class = BookModelSerializer
#配置分页
pagination_class = MyPageNumberPagination
浙公网安备 33010602011771号