概要

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

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)
# 1.导入模块
from rest_framework.pagination import PageNumberPagination # 自定义分页器类,继承PageNumberPagination
class MyPagination(PageNumberPagination):
page_size = 3
page_query_param = 'p'
page_size_query_param = 'size'
max_page_size = 5 class BookView(APIView): def get(self, request):
# 2.获取数据
queryset = Book.objects.all()
# 3.创建分页器对象
paginater = MyPagination()
# 4.开始分页
paged_books = paginater.paginate_queryset(queryset, request)
# 5.将分页后的数据进行序列化
serializer_books = BookSerializer(paged_books, many=True)
# 6.返回数据
return Response(serializer_books.data)

几个参数介绍

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

自定义分页器

class MyPagination(PageNumberPagination):
page_size = 2
page_query_param = 'p'
page_size_query_param = 'size'
max_page_size = 5

在ModelViewSet中使用分页器

from rest_framework.viewsets import ModelViewSet
from rest_framework.pagination import PageNumberPagination # 自定义分页器类
class MyPagination(PageNumberPagination):
page_size = 3
page_query_param = 'p'
page_size_query_param = 'size'
max_page_size = 5 class BookView(ModelViewSet): pagination_class = MyPagination # 指定分页器类 queryset = Book.objects.all()
serializer_class = BookSerializer
复制代码
4、分页器全局配置 REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10 # 每页数目
}

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

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

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

  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. 一个html+js+ashx+easyui+ado.net权限管理系统

    http://www.cnblogs.com/oppoic/p/html_js_ashx_easyui_authorize.html

  2. LeetCode OJ:Valid Anagram(有效字谜问题)

    Given two strings s and t, write a function to determine if t is an anagram of s. For example,s = &q ...

  3. 利用 localStorage 储存css js

    链接  版本号, 可以后台输出到jsp页面上 移动端webapp值得一试: 兼容性好 网速慢,LS读取+eval大多数情况下快于304 webapp不需要seo,css也可以缓存,再通过js加载 浏览 ...

  4. 《Drools7.0.0.Final规则引擎教程》第2章 追溯Drools5的使用

    2.1 Drools5简述 上面已经提到Drools是通过规则编译.规则收集和规则的执行来实现具体功能的.Drools5提供了以下主要实现API: KnowledgeBuilder Knowledge ...

  5. vue前端开发那些事——前言

    如上图所示,用vue开发一个小型网站所涉及到的知识点.这只是前端部分已经这么多了.接下来我分解开来说. 1.Node 当我们开发vue项目的时候,首先要安装Node.js,那么我们即使当时不理解为什么 ...

  6. 完整的验证码识别流程基于svm(若是想提升,可优化)

    字符型图片验证码识别完整过程及Python实现 首先很感觉这篇文章的作者,将这篇文章写的这么好.我呢,也是拿来学习,觉得太好,所以忍不住就进行了转载. 因为我个人现在手上也有个验证码识别的项目,只是难 ...

  7. Intent详解以及实例

    Android中统一用Intent来封装程序的“调用意图“.不管程序想启动一个Activity,一个Servicer,还是一个BroadcastReceiver.使用Intent提供了一个统一的编程模 ...

  8. Winform、WPF、Silverlight、MFC区别与联系

    WinForm 在Windows中,诸如窗体绘制等功能由GDI(图形设备接口)实现,放在操作系统内核中.Windows Forms在底层使用的是GDI+.GDI+是GDI的“面向对象包装”,使用C++ ...

  9. call、apply、bind用法区别

    call call() 方法调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表). <p class="danger"> 注意:该方法的作用和 ...

  10. 阿里云服务器tomcat启动慢解决方案

    yum -y install rng-tools( 熵服务)     cp /usr/lib/systemd/system/rngd.service /etc/systemd/system     v ...