RESTful【第五章】:DRF之注册器、响应器、分页器

DRF之注册器、响应器、分页器

本文介绍的是DRF的注册器组件、响应器组件、分页器组件。

一、引入

通过前面几节课的学习,我们已经大致的将DRF的主要组件都学习过了,包括使用方式和源码剖析,对于源码剖析,我们不仅仅需要知道DRF是怎样做的,而且需要知道它为什么这么多,这才是我们看源码的目的,要学习优秀的人的思路和解决问题的方式。学习他人优秀的编码风格,能够纠正我们写程序时的坏习惯,也能开阔我们的思路和眼界。

二、今日概要

  • url注册器
  • 响应器
  • 分页器

三、今日详细

1. url注册器(在urls.py文件中操作)

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

  第一步:导入模块

from rest_framework import routers

  第二步:实例化一个router对象

router = DefaultRouter()

  第三步:将需要自动生成url的接口注册到router中

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

  第四步:生成url

re_path('^',include(router.urls))

2. 响应器

之前我们使用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的查找逻辑与之前的解析器等等组件是完全一样的。

3. 分页器

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

所以,我们需要控制每次返回给客户端多少数据,这就需要用到分页器,接下来,我们一起来看看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)
3.1 几个参数介绍
  • page_size:用来控制每页显示多少条数据(全局参数名为PAGE_SIZE);
  • page_query_param:用来提供直接访问某页的数据;
  • page_size_query_param:临时调整当前显示多少条数据
  • max_page_size:控制page_size_query_param参数能调整的最大条数
3.2 自定义分页器

我们可以新添加一个用来分页的py文件,app_paginates.py

from rest_framework.pagination import PageNumberPagination


class MyPagination(PageNumberPagination):
    page_size = 4
    page_query_param = 'page'
    page_size_query_param = 'size'
    max_page_size = 5

然后在view视图中操作:

from .app_paginates import MyPagination

class BookView(ModelViewSet):
    renderer_classes = [JSONRenderer]
    authentication_classes = [UserAuth]
    permission_classes = [UserPerm]
    throttle_classes = [RateThrottle]

    pagination_class = MyPagination

    queryset = Book.objects.all()
    serializer_class = BookSerializer

Postman查看:

四、今日总结

  • url注册器
  • 响应器
  • 分页器

五、练习

练习注册器、响应器、分页器的使用

 

转载于:https://www.cnblogs.com/zhangjunkang/p/10102249.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值