一. 分页
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 # 每页数目 }