rest_framework之解析器、路由控制、分页
解析器
我们都知道,网络传输数据只能传输字符串格式的,如果是列表、字典等数据类型,需要转换之后才能使用
但是我们之前的rest_framework例子都没有转换就直接可以使用了,这是因为rest_framework有一套解析器,
默认他会帮我们转换3种类型的数据,分别是,JSONParser,FormParser,MultiPartParser
而如果我们需要转换其他数据,需要在视图类里配置parser_classes参数,如下:
from rest_framework.parsers import JSONParser,FormParser,MultiPartParser,FileUploadParser
parser_classes = [JSONParser,FormParser,FileUploadParser]
路由控制
我们之前在写例子的时候,视图类已经封装到最精简版本了,但是url变的比之前复杂了,如下:
url(r'^publishes/$', views.PublishViewSet.as_view({'get':'list','post':'create'})),url(r'^publishes/(?P<pk>\d+)/$', views.PublishViewSet.as_view({'get':'retrieve','put':'update','delete':'destroy','patch':'partial_update'})),
上面只是一个视图类对应的url,如果项目做的很大,那么url会变的非常臃肿,
而rest_framework给我们封装了一种自动注册url的功能,格式如下:
from django.conf.urls import url
from django.contrib import admin
from app01 import viewsfrom django.conf.urls import include
from rest_framework import routers# 实例化一个routers对象
routers = routers.DefaultRouter()
# 往对象里注册(添加)url
routers.register('publishes',views.PublishViewSet)
然后,在urlpatterns中添加已经注册的url(在routers.urls里),如下:
url(r'',include(routers.urls))
完整版的urlpatterns配置
urlpatterns = [url(r'^admin/', admin.site.urls),url(r'^login/', views.Login.as_view()),url(r'^authors/$', views.AuthorsView.as_view()),url(r'^authors/(\d+)/$', views.AuthorsDetailView.as_view()),url(r'',include(routers.urls))
]
这个时候,rest_framework会帮我们自动添加了4个url,如下图:
分页
继承APIView类的视图中添加分页
from rest_framework.pagination import PageNumberPagination
class MyPageNumberPagination(PageNumberPagination):# 定义一个PageNumberPagination的子类# 如需改变参数,重写其属性即可page_size = 6 #每页显示条数page_query_param = 'page' # url中的参数的keypage_size_query_param="size" # 可以在url中使用size参数临时改变当页显示的数目max_page_size=10 # 可以在url中使用size参数临时改变当页显示的数目,但是最大只能显示10条class AuthorsView(APIView):def get(self,request):'''分页展示作者列表'''author_list = models.Author.objects.all()# 分页# 实例化一个自己定义的MyPageNumberPagination对象pnp = MyPageNumberPagination()# 调用paginate_queryset方法来生成新的author_list# 参数分别为,author_list,request以及当前的视图page_author_list = pnp.paginate_queryset(author_list,request,self)# 在将新生成的page_author_list序列化auts = serializer.AuthorModelSerializers(page_author_list,many=True)return Response(auts.data)
继承ModelViewSet类的视图中添加分页
如果我们的视图继承了ModelViewSet类,那么如需分页的时候,只需要在视图类中加入配置参数即可,如下:
pagination_class = MyPageNumberPagination
注意:
1、MyPageNumberPagination类是我们自己定义的类,见上面一个示例。
2、pagination_class后面直接跟上类名即可,无需加列表(因为分页不想其他组件,分页只可能有一个)
全局配置分页属性
只需要在REST_FRAMEWORK配置中加入 配置属性的键值对即可,如下:
REST_FRAMEWORK = {....."PAGE_SIZE":1
}
转载于:https://www.cnblogs.com/fu-yong/p/9067690.html
rest_framework之解析器、路由控制、分页相关推荐
- DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)...
url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...
- rest-framework解析器,url控制,分页,响应器,渲染器,版本控制
解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...
- rest_framework之解析器详解 05
解析器就是服务端写api,对于前端用户发来的数据进行解析.解析完之后拿到自己能用数据. 本质就是对请求体中的数据进行解析. django的解析器 post请求过来之后,django 的request. ...
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)
解析器介绍: 所谓解析器,就是前端传过来的数据,后端可以解析,从request.data中取出来,默认的解析器配置是三种编码格式都可以取 回到顶部 解析器的作用: 根据请求头(content-type ...
- Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(一)
阅读目录 一.url控制 基本路由写法:最常用 第二种写法:继承ModelViewSet 第三种写法:(自动生成路由,必须继承ModelViewSet) 二.解析器 前端不同的数据格式请求,后端解析得 ...
- drf 解析器,响应器,路由控制
解析器 作用: 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有application/json,x-www-form-urlencoded,form-data等格式使 ...
- rest_framework学习之解析器(Parsers)
概述 什么是解析器?在DRF中,解析器是一个类列表,当每次接收到请求时,RDF会根据请求头中的Content-type,来指定使用哪钟解析方法去解析数据.当content-type与解析器列表均不匹配 ...
- Rest Framework第二天-序列化组件(下)、解析器
序列化组件(下) 一.rest-framework序列化之ModelSerializer class BookSerializers(serializers.ModelSerializer):clas ...
- rest-framework之解析器
rest-framework之解析器 本文目录 一 解析器的作用 二 全局使用解析器 三 局部使用解析器 四 源码分析 回到目录 一 解析器的作用 根据请求头 content-type 选择对应的解析 ...
- wireshark协议解析器原理与插件编写
工作原理 每个解析器解码自己的协议部分, 然后把封装协议的解码传递给后续协议. 因此它可能总是从一个Frame解析器开始, Frame解析器解析捕获文件自己的数据包细节(如:时间戳), 将数据交给一个 ...
最新文章
- 牛客网多校训练第一场 B - Symmetric Matrix(dp)
- CentOS查看CPU信息、位数、多核信息
- Ubuntu 14.04 64bit + CUDA 6.5 配置说明
- SAP Kyma上创建的Lambda function背后的技术实现
- ad19原理图标注_AD19中原理图的模板如何进行编辑?
- 警惕 | 警惕,mybatis的size()方法竟然有坑!
- 3-31Pytorch与auto-variabletensor
- 计算机思维与计算文化,计算文化与计算思维基础
- 编译原理第一章笔记--绪论
- 无法删除文件 无法读取源文件或磁盘_U盘损坏“无法读取文件”不要慌,教你一招马上回血复活...
- 修改注册表——让Excel同时显示两个窗口/多个文件
- HTTPS(一) -- 基础知识(密钥、对称加密、非对称加密、数字签名、数字证书)
- Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)
- 采用高德地图 实现打车功能代码
- 分享16个经典面试问题回答思路
- scp命令传输出现ssh: Could not resolve hostname错误
- 多线程爬取免费代理ip池 (给我爬)
- Linux ps aux什么含义,Linux下psaux解释
- dodo:人脸识别方法个人见解zz
- js中不会影响原数组的方法