DRF之注册器、响应器、分页器
一、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 |
urlpatterns = [ |
注意:通过url注册器生成的url,会自动分发浏览发过来的get、post、put、delete请求,不需要我们再向as_view()方法中传{'get':'list','post':'create'}这样的参数
二、响应器
之前我们使用DRF的Response类来将数据响应给客户端,不管是POSTMAN还是浏览器,都能浏览到经过格式化后的漂亮的数据,DRF是怎么做的呢?其实就是通过响应器组件
如果我们不需要使用DRF提供给浏览器的格式化后的数据,只需要禁止该响应方式即可:
1 |
from rest_framework.renderers import JSONRenderer class BookView(ModelViewSet): |
这样,浏览器再次访问,接收到的就是普通的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 |
class MyPagination(PageNumberPagination): |
视图类:(继承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之注册器、响应器、分页器的更多相关文章
- DRF之注册器响应器分页器
概要 url注册器 响应器 分页器 url注册器 通过DRF的视图组件,数据接口逻辑被我们优化到最剩下一个类,接下来,我们使用DRF的url控制器来帮助我们自动生成url,使用步骤如下: 第一步:导入 ...
- rest认证组件,权限组件,频率组件,url注册器,响应器组件,分页器组件
1.认证组件 1.1 认证组件利用token来实现认证 1.2 token认证的大概流程 用户登录===>获取用户名和密码===>查询用户表 如果用户存在,生成token,否则返回错误信息 ...
- DRF(5) - 频率组件、url注册器、响应器、分页器
一.频率组件 1.使用DRF简单频率控制实现对用户进行访问频率控制 1)导入模块,定义频率类并继承SimpleRateThrottle # 导入模块 from rest_framework.throt ...
- Restful 4 -- 认证组件、权限组件、频率组件、url注册器、响应器、分页器
一.认证组件.权限组件.频率组件总结: 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 1.认证组件格式 写一个认 ...
- django url注册器组件, 响应器组件, 分页器组件
一.url注册器的使用 1.1导入模块 from django.urls import re_path, include from .serializer import views from rest ...
- rest-framework频率组件、url注册器、响应器、分页器
频率组件 import time from rest_framework.throttling import BaseThrottle,SimpleRateThrottle IP_DICT = {} ...
- RestFramework之注册器、响应器与分页器
一.注册器的说明与使用 在我们编写url时经常会因请求方式不同,而重复编写某条url,而rest_framework中的注册器帮我节省了很多代码 下面介绍一下如何使用 # 利用注册器来实现路由分发 f ...
- DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
- day91 DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
DjangoRestFramework学习三之认证组件.权限组件.频率组件.url注册器.响应器.分页组件 本节目录 一 认证组件 二 权限组件 三 频率组件 四 URL注册器 五 响应器 六 分 ...
随机推荐
- JS 取整、取余
一.取整 1. 取整 // 丢弃小数部分,保留整数部分 parseInt(7/2) // 3 2. 向上取整 // 向上取整,有小数就整数部分加1 Math.ceil(7/2) // 4 3. 向下取 ...
- MongoDB的复制源oplog
之前有说过MongoDB的复制是异步复制的,其实也就是通过oplog来实现的,他存放在local数据库中,我们来查询一下主节点的日志大小. 除了主节点有oplog之外,其他节点也就有oplog ...
- mysql操作遇到的坑(第二版)
1.通过条件查询出上一条与下一条 sql说明:本表关联本表,然后通过其中一个表,查询出对应的条件,再用另外一个表求出上一条与下一条的数据,求出来的数据是多条的 SELECT ua.id, ua.wx_ ...
- WebGL简易教程(八):三维场景交互
目录 1. 概述 2. 实例 2.1. 重绘刷新 2.2. 鼠标事件调整参数 3. 结果 4. 参考 1. 概述 在上一篇教程<WebGL简易教程(七):绘制一个矩形体>中,通过一个绘制矩 ...
- while 格式化输出 编码初识
1.while循环 while 关键字 空格 条件 冒号 缩进 循环体 while 3>2: print("好嗨呦") print("你的骆驼") pri ...
- 你不可错过的Java学习资源清单
学习Java和其他技术的资源其实非常多,但是我们需要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学习资源清单. Ja ...
- spring5 源码深度解析----- 事务的回滚和提交(100%理解事务)
上一篇文章讲解了获取事务,并且通过获取的connection设置只读.隔离级别等,这篇文章讲解剩下的事务的回滚和提交 回滚处理 之前已经完成了目标方法运行前的事务准备工作,而这些准备工作最大的目的无非 ...
- 在我的新书里,尝试着用股票案例讲述Python爬虫大数据可视化等知识
我的新书,<基于股票大数据分析的Python入门实战>,预计将于2019年底在清华出版社出版. 如果大家对大数据分析有兴趣,又想学习Python,这本书是一本不错的选择.从知识体系上来看, ...
- ES6——箭头函数与普通函数的区别
ES6标准新增了一种新的函数:Arrow Function(箭头函数). 为什么叫Arrow Function?因为它的定义用的就是一个箭头: 语法: //1.没有形参的时候 let fun = () ...
- python 基本排序算法
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019/9/15 下午5:06 # @Author : lb # @File : so ...