DRF of the page, url registration, release, filter, renderer

First, pagination

If the data is very large, we need to use the paging. The front end of the transmission request, to take the first few pages of data, I will take the first few pages from a database, sending only the data that page.

  • 1, the amount of data is very much time, you have to pick up part by part.

    ①,导入类。
        from rest_framework.pagination import PageNumberPagination   #  默认的分页类
    ②,引用类。
        def get(self, request):
            book_list = Book.objects.all()
            pnp = PageNumberPagination()  # 分页使用
            paged_book_list = pnp.paginate_queryset(book_list,request)  # 分完页之后的书籍列表
            bs = BookSerializer(paged_book_list, many=True)
            return Response(bs.data)
    ③,settings中设置全局页数,"PAGE_SIZE":5
            REST_FRAMEWORK={
             "PAGE_SIZE":5
            #  如果这样设,所有的模型表分页都按照这个来了,因为每个表的数据量不同,所以没必要设置都一样
            }
    ④,取数据。
        http://127.0.0.1:8000/book/?token=f0a77220-255f-414a-9bd8-09a5893649de&page=2
    
  • 2, that will write all the models are like the table top paging. There is also a writing.

    ①,导入类
        from rest_framework.pagination import PageNumberPagination
    ②,自定义类,并覆盖所需变量。
        def get(self, request):
            class MyPageNumberPagination(PageNumberPagination):
                page_size=2
                page_query_param="page_num" # url上需要加的参数
                page_size_query_param="size"
                # 用于调整每页数据,如果前端不设置,就用我自己的每页多少条,如果前端想设置,就使用这个词。
                max_page_size=5
                # 最多显示条数,配合上面使用,设置可调之后才进行约束
    
              # http://127.0.0.1:8000/book/?token=f0a77220-255f-414a-9bd8-09a5893649de&page_num=2&size=3
              # 每页显示3条的第2页,一般这样写↓,先设置每页显示多少条,再说显示第几页。
              # http://127.0.0.1:8000/book/?token=f0a77220-255f-414a-9bd8-09a5893649de&size=3&page_num=5
            book_list=Book.objects.all()
            pnp=MyPageNumberPagination() # 分页使用
            paged_book_list=pnp.paginate_queryset(book_list,request) # 分完页之后的书籍列表
            bs = BookSerializer(paged_book_list, many=True)
            return Response(bs.data)
    
  • 3, completely encapsulated view class how to use pager

      ①,from rest_framework.pagination import PageNumberPagination
    
      ②,class MyPageNumberPagination(PageNumberPagination):
              page_size = 2  # 自定义每页数据
    
      ③,class AuthorsView(ModelViewSet):
              queryset = Author.objects.all()
              serializer_class = AuthorSerializer
              pagination_class = MyPageNumberPagination
      ④,显示出来的是这样的数据
            {
                "count": 3,
                "next": "http://127.0.0.1:8000/authorsss/?page=2&token=f0a77220-255f-414a-9bd8-09a5893649de",
                "previous": null,
                "results": [
                    {
                        "nid": 1,
                        "name": "王七",
                        "age": 30
                    },
                    {
                        "nid": 2,
                        "name": "李四",
                        "age": 28
                    }
                ]
            }
    

Two, url registrar

1,如果是数据模型,只有简单的增删改查查的话可以简单的封装成一个类
    class AuthorsView(ModelViewSet):
        queryset = Author.objects.all()
        serializer_class = AuthorSerializer

2,但是url需要自己写,两条。
    url(r'^authorsss/$',views3.AuthorsView.as_view({'get':'list','post':'create'})),
    url(r'^authorsss/(?P<pk>\d+)/',views3.AuthorsView.as_view({'get':'retrieve','delete':'destroy','put':'update'})),

3,但是用了注册器就不用自己写路由了,并且还多了两条。
    使用:
          from rest_framework import routers
          router = routers.DefaultRouter()
          router.register('authorssssss',views3.AuthorsView)  # 所需变量:路由,视图类
          from django.conf.urls import url,include
          url(r'^',include(router.urls))

Third, release , filter , renderer

Reproduced in: https: //www.jianshu.com/p/d92bb4ad8e4b

Guess you like

Origin blog.csdn.net/weixin_33674976/article/details/91149309