解析器

我们都知道,网络传输数据只能传输字符串格式的,如果是列表、字典等数据类型,需要转换之后才能使用

但是我们之前的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之解析器、路由控制、分页相关推荐

  1. DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)...

    url控制 第二种写法(只要继承了ViewSetMixin) url(r'^pub/$',views.Pub.as_view({'get':'list','post':'create'})), #获取 ...

  2. rest-framework解析器,url控制,分页,响应器,渲染器,版本控制

    解析器 1.json解析器 发一个json格式的post请求.后台打印: request_data---> {'title': '北京折叠'} request.POST---> <Q ...

  3. rest_framework之解析器详解 05

    解析器就是服务端写api,对于前端用户发来的数据进行解析.解析完之后拿到自己能用数据. 本质就是对请求体中的数据进行解析. django的解析器 post请求过来之后,django 的request. ...

  4. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(二)

    解析器介绍: 所谓解析器,就是前端传过来的数据,后端可以解析,从request.data中取出来,默认的解析器配置是三种编码格式都可以取 回到顶部 解析器的作用: 根据请求头(content-type ...

  5. Django框架深入了解_04(DRF之url控制、解析器、响应器、版本控制、分页)(一)

    阅读目录 一.url控制 基本路由写法:最常用 第二种写法:继承ModelViewSet 第三种写法:(自动生成路由,必须继承ModelViewSet) 二.解析器 前端不同的数据格式请求,后端解析得 ...

  6. drf 解析器,响应器,路由控制

    解析器 作用: 根据请求头 content-type 选择对应的解析器对请求体内容进行处理. 有application/json,x-www-form-urlencoded,form-data等格式使 ...

  7. rest_framework学习之解析器(Parsers)

    概述 什么是解析器?在DRF中,解析器是一个类列表,当每次接收到请求时,RDF会根据请求头中的Content-type,来指定使用哪钟解析方法去解析数据.当content-type与解析器列表均不匹配 ...

  8. Rest Framework第二天-序列化组件(下)、解析器

    序列化组件(下) 一.rest-framework序列化之ModelSerializer class BookSerializers(serializers.ModelSerializer):clas ...

  9. rest-framework之解析器

    rest-framework之解析器 本文目录 一 解析器的作用 二 全局使用解析器 三 局部使用解析器 四 源码分析 回到目录 一 解析器的作用 根据请求头 content-type 选择对应的解析 ...

  10. wireshark协议解析器原理与插件编写

    工作原理 每个解析器解码自己的协议部分, 然后把封装协议的解码传递给后续协议. 因此它可能总是从一个Frame解析器开始, Frame解析器解析捕获文件自己的数据包细节(如:时间戳), 将数据交给一个 ...

最新文章

  1. 牛客网多校训练第一场 B - Symmetric Matrix(dp)
  2. CentOS查看CPU信息、位数、多核信息
  3. Ubuntu 14.04 64bit + CUDA 6.5 配置说明
  4. SAP Kyma上创建的Lambda function背后的技术实现
  5. ad19原理图标注_AD19中原理图的模板如何进行编辑?
  6. 警惕 | 警惕,mybatis的size()方法竟然有坑!
  7. 3-31Pytorch与auto-variabletensor
  8. 计算机思维与计算文化,计算文化与计算思维基础
  9. 编译原理第一章笔记--绪论
  10. 无法删除文件 无法读取源文件或磁盘_U盘损坏“无法读取文件”不要慌,教你一招马上回血复活...
  11. 修改注册表——让Excel同时显示两个窗口/多个文件
  12. HTTPS(一) -- 基础知识(密钥、对称加密、非对称加密、数字签名、数字证书)
  13. Python全栈 MongoDB 数据库(聚合、二进制、GridFS、pymongo模块)
  14. 采用高德地图 实现打车功能代码
  15. 分享16个经典面试问题回答思路
  16. scp命令传输出现ssh: Could not resolve hostname错误
  17. 多线程爬取免费代理ip池 (给我爬)
  18. Linux ps aux什么含义,Linux下psaux解释
  19. dodo:人脸识别方法个人见解zz
  20. js中不会影响原数组的方法

热门文章

  1. 一个简单的txt读取与导出
  2. 【渝粤教育】国家开放大学2019年春季 1152教育法学 参考试题
  3. [渝粤教育] 广东-国家-开放大学 21秋期末考试土力学与地基基础10445k1
  4. 【渝粤教育】国家开放大学2018年秋季 1356T高级英语听说(2) 参考试题
  5. 广东开放大学学习指南
  6. 数据挖掘:概念与技术 笔记
  7. Lecture 4:无模型预测
  8. UnicodeMath编码教程
  9. Elasticsearch分词导致的查找错误
  10. vue2.0 组件和v-model