一、url注册器

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

第一步:导入模块

1
from rest_framework import routers

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

1
router = routers.DefaultRouter()

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

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

第四步:生成url

1
2
3
urlpatterns = [
re_path(r'^', include('router.urls')),
]
注意:通过url注册器生成的url,会自动分发浏览发过来的get、post、put、delete请求,不需要我们再向as_view()方法中传{'get':'list','post':'create'}这样的参数

二、响应器

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

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

1
2
3
4
5
6
7
8
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的分页器组件。

第一步:导入模块

1
from rest_framework.pagination import PageNumberPagination

第二步:获取数据

1
books = Book.objects.all()

第三步:创建分页器

1
paginator = PageNumberPagination()

第四步:开始分页

1
paged_books = paginator.paginate_queryset(books, request)    #paged_books为每一页所对应的书籍列表,里面为一个个的书籍对象

第五步:将分页后的数据进行序列化

1
serialized_data = BookSerializer(paged_books, many=True)

第六步:返回数据

1
return Response(serialized_data.data)
几个参数介绍
  • page_size:用来控制每页显示多少条数据(全局参数名为PAGE_SIZE,在settings里面配置,如下:);
REST_FRAMEWORK = {
"PAGE_SIZE": 4
}
  • page_query_param:用来提供直接访问某页的数据;例如?page=3
  • page_size_query_param:临时调整当前显示多少条数据   例如?size=6
  • max_page_size:控制page_size_query_param参数能调整的最大条数

自定义分页器------自定义的分页器需要继承PageNumberPagination

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

视图类:(继承APIView)

class BookView(APIView):
def get(self, request):
books = Book.objects.all() paginater = MyPagination() paged_books = paginater.paginate_queryset(books, request)
print('paged_books:',paged_books) #每页所对应的书籍对象列表 serialized_books = BookSerializer(paged_books, many=True) return Response(serialized_books.data)

(继承ModelViewSet)

class BookView(ModelViewSet):
#指定分页器类
pagination_class = MyPagination queryset = Book.objects.all()
serializer_class = BookSerializer

DRF之注册器、响应器、分页器的更多相关文章

  1. DRF之注册器响应器分页器

    概要 url注册器 响应器 分页器 url注册器 通过DRF的视图组件,数据接口逻辑被我们优化到最剩下一个类,接下来,我们使用DRF的url控制器来帮助我们自动生成url,使用步骤如下: 第一步:导入 ...

  2. rest认证组件,权限组件,频率组件,url注册器,响应器组件,分页器组件

    1.认证组件 1.1 认证组件利用token来实现认证 1.2 token认证的大概流程 用户登录===>获取用户名和密码===>查询用户表 如果用户存在,生成token,否则返回错误信息 ...

  3. DRF(5) - 频率组件、url注册器、响应器、分页器

    一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...

  4. Restful 4 -- 认证组件、权限组件、频率组件、url注册器、响应器、分页器

    一.认证组件.权限组件.频率组件总结:  只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 1.认证组件格式 写一个认 ...

  5. django url注册器组件, 响应器组件, 分页器组件

    一.url注册器的使用 1.1导入模块 from django.urls import re_path, include from .serializer import views from rest ...

  6. rest-framework频率组件、url注册器、响应器、分页器

    频率组件 import time from rest_framework.throttling import BaseThrottle,SimpleRateThrottle IP_DICT = {} ...

  7. RestFramework之注册器、响应器与分页器

    一.注册器的说明与使用 在我们编写url时经常会因请求方式不同,而重复编写某条url,而rest_framework中的注册器帮我节省了很多代码 下面介绍一下如何使用 # 利用注册器来实现路由分发 f ...

  8. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

  9. day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件

    DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件   本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...

随机推荐

  1. JS/Jquery 表单方式提交总结

    1. submit提交 (1). submit 按钮式提交 缺点:在提交前不可修改提交的form表单数据 // 1. html <form method="post" act ...

  2. CSS3 transform属性

    说明: transform 属性向元素应用 2D 或 3D 转换.该属性允许我们对元素进行移动(translate).旋转(rotate).缩放(scale)或倾斜(skew) transition属 ...

  3. RabbitMQ原理介绍

    RabbitMQ历史 RabbitMQ消息系统是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.在同步消息通讯的世界里有很多公开标准(如COBAR的IIO ...

  4. VS Code配置Go语言开发环境(建议使用goland)

    VS Code是微软开源的一款编辑器,插件系统十分的丰富.本文就介绍了如何使用VS Code搭建Go语言开发环境. VS Code配置Go语言开发环境 说在前面的话,Go语言是采用UTF8编码的,理论 ...

  5. Ng项目安装到指定盘符

    全局安装 1.node.js 2.cnpm 3.typeScript 4.ng-cli 指定安装: 1.首先在想要的盘符内新建一个名字 例: D盘中新建一个angualr的文件夹 2.在开始菜单中输入 ...

  6. jQuery插件编写学习中遇见的问题--attr prop

    个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...

  7. docker升级后启动报错400 Client Error: Bad Request ("Unknown runtime specified docker-runc")

    宝塔面板docker升级后启动容器时报错400 Client Error: Bad Request ("Unknown runtime specified docker-runc" ...

  8. Redis之安装配置(Windows)

    下载 下载地址:https://github.com/MSOpenTech/redis/releases 解压,文件的名字重命名为redis. 打开文件夹,内容如下: 发送redis-server.e ...

  9. MySQL的索引原理(图解)

    数据库的索引原理 0.什么是索引 ​ 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,数据库索引好比是一本书前面的目录,能 ...

  10. 写在Python学习前

    Python是一门非常有意思的语言,不需要太多的语言基础,就可以实现自己想要的操作.许多非计算机专业的学生都可以利用词云分析.分词.画图等实现自己想要的东西.学习Python和学习其他语言一样,需要耐 ...