九.Django---framework框架 分页

一. 分页

https://www.cnblogs.com/open-yang/p/11573538.html   

https://blog.csdn.net/qyf__123/article/details/84993125

https://www.cnblogs.com/MayDayTime/p/9890877.html

  序列化

class BookModelSerializers(serializers.ModelSerializer):
      class Meta:
          model = Book
          fields = "__all__"





from
rest_framework.parsers import JSONParser,FormParser,MultiPartParser,FileUploadParser from rest_framework.pagination import PageNumberPagination,LimitOffsetPagination class MyPageNumberPagination(PageNumberPagination): page_size = 1 page_query_param = 'page' page_size_query_param="size" max_page_size=2 class MyLimitOffsetPagination(LimitOffsetPagination): default_limit=1 class BookView(APIView): # authentication_classes = [TokenAuth,] # [TokenAuth(),] # permission_classes = [] # throttle_classes = [] parser_classes = [JSONParser,FormParser] def get(self,request): print("request.user",request.user) print("request.auth",request.auth) print("_request.body",request._request.body) print("_request.GET",request._request.GET) book_list=Book.objects.all() # 分页 pnp=MyLimitOffsetPagination() books_page=pnp.paginate_queryset(book_list,request,self) bs=BookModelSerializers(books_page,many=True,context={'request': request}) return Response(bs.data) def post(self,request): # post请求的数据 print("request.data",request.data) bs=BookModelSerializers(data=request.data) if bs.is_valid(): print(bs.validated_data) bs.save()# create方法 return Response(bs.data) else: return Response(bs.errors)



序列化

class AuthorModelSerializers(serializers.ModelSerializer):

   class Meta:
      model = Author
      fields = "__all__"

class AuthorModelView(viewsets.ModelViewSet):
    #authentication_classes = [TokenAuth,]
    #permission_classes=[SVIPPermission,]
    #throttle_classes = [VisitRateThrottle]    # 限制某个IP每分钟访问次数不能超过20次
    queryset = Author.objects.all()
    serializer_class = AuthorModelSerializers
    pagination_class = MyPageNumberPagination
    renderer_classes = []

def get_random_str(user): import hashlib,time ctime=str(time.time()) md5=hashlib.md5(bytes(user,encoding="utf8")) md5.update(bytes(ctime,encoding="utf8")) return md5.hexdigest()
settings

REST_FRAMEWORK = {

    # "DEFAULT_AUTHENTICATION_CLASSES": ["app01.utils.TokenAuth",],
    # "DEFAULT_PERMISSION_CLASSES": ["app01.utils.SVIPPermission",],
    # "PAGE_SIZE":1
}

 

二. 分页全局

也可通过自定义Pagination类,来为视图添加不同分页行为。在视图中通过pagination_class属性来指明。

class
LargeResultsSetPagination(PageNumberPagination): page_size = 1000 page_size_query_param = 'page_size' max_page_size = 10000 class BookDetailView(RetrieveAPIView): queryset = BookInfo.objects.all() serializer_class = BookInfoSerializer pagination_class = LargeResultsSetPagination

REST framework提供了分页的支持。

我们可以在配置文件中设置全局的分页方式,如:


REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 100 # 每页数目 }

 

posted @ 2019-10-11 14:45  supreme999  阅读(148)  评论(0)    收藏  举报