欢迎来到夜的世界

莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生.料峭春风吹酒醒,微冷,山头斜照却相迎。回首向来萧瑟处,归去,也无风雨也无晴。
扩大
缩小

注册器 , 响应器 , 分页器

       url 注册器      

   通过DRF的视图组件,数据接口逻辑被我们优化到剩下一个类,接下来,我们使用DRF的url 控制器来帮助我们自动生成url : 

  --- 导入模块 

from rest_framework import routers

  --- 实例化一个router 对象

router = DefaultRouter()

  --- 将需要自动生成url 的接口注册到 router 中 

router.register(r'books', views.BookView)

  --- 生成url 

urlpatterns = [
    re_path(r'^', include('router.urls')),
]

        响应器         

  之前我们使用DRF的Response类来将数据响应给客户端,不管是POSTMAN还是浏览器,都能浏览到经过格式化后的漂亮的数据,DRF是怎么做的呢?其实就是通过响应器组件

如果我们不需要使用DRF提供给浏览器的格式化后的数据,只需要禁止该响应方式即可:

from rest_framework.renderers import JSONRenderer


class BookView(ModelViewSet):
    renderer_classes = [JSONRenderer]
    throttle_classes = [RateThrottle]
    queryset = Book.objects.all()
    serializer_class = BookSerializer

  这样,浏览器再次访问,接收到的就是普通的json格式数据,而不是经过DRF格式化后的数据,renderer_classes的查找逻辑与之前的解析器等等组件是完全一样的。

       分页器        

  为了服务器性能考虑,也为了用户体验,我们不应该一次将所有的数据从数据库中查询出来,返回给客户端浏览器,如果数据量非常大,这对于服务器来讲,可以说是性能灾难,而对于用户来讲,加载速度将会非常慢。

  所以,我们需要控制每次返回给客户端多少数据,这就需要用到分页器,接下来,我们一起来看看DRF的分页器组件。

  --- 导入模块 

from rest_framework.pagination import PageNumberPagination

  --- 获取数据 

books = Book.objects.all()

  --- 创建分页器 

paginater = PageNumberPagination()

  --- 开始分页 

paged_books = paginater.paginate_queryset(books, request)

  --- 将分页后的数据进行序列化 

serialized_data = BookSerializer(paged_books, many=True)

  --- 返回数据 

return Response(serialized_data.data)

参数介绍 : 

  • page_size:用来控制每页显示多少条数据(全局参数名为PAGE_SIZE);
  • page_query_param:用来提供直接访问某页的数据;
  • page_size_query_param:临时调整当前显示多少条数据
  • max_page_size:控制page_size_query_param参数能调整的最大条数

自定义分页器 : 

(放在了app_paginates.py 中)

class MyPagination(PageNumberPagination):
    page_size = 2
    page_query_param = 'p'
    page_size_query_param = 'size'
    max_page_size = 5
class BookView(ModelViewSet):
    # 分页
    pagination_class = app_paginates.MyPagination
    queryset = Book.objects.all()
    serializer_class = BookSerializer

 

posted on 2018-12-11 21:57  二十四桥_明月夜  阅读(231)  评论(0)    收藏  举报

导航