一、解析器

解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据。本质就是对请求体中的数据进行解析。

1、分类

from rest_framework.parsers import JSONParser, FormParser, FileUploadParser, MultiPartParser

a、JSONParser

解析JSON数据类型

b、FormParser

解析urlencode数据类型

c、MultiPartParser

解析form-data数据类型

d、FileUploadParser

解析上传的文件

2、默认的解析器

DEFAULT_PARSER_CLASSES': [
'rest_framework.parsers.JSONParser',
'rest_framework.parsers.FormParser',
'rest_framework.parsers.MultiPartParser'
]

3、重写parser_classes

在视图类中添加

parser_classes = [JSONParser]

二、渲染器

渲染器同解析器相反,它定义了框架按照content_type来返回不同的响应

默认设置

 'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),

局部设置

class PublisherViewSet(ModelViewSet):
queryset = models.Publisher.objects.all()
serializer_class = PublisherModelSerializer
renderer_classes = [JSONRenderer, ]

全局设置

REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
}

三、url控制

1、产生原因

restframework视图组件,通过含参的as_view()解决了两个get的问题,实现了视图类的同一,但url仍然有两条

2、解决方式

a、原来

    path('author/', views.AuthorViewSet.as_view({'get': 'list', 'post': 'create'})),
path('author/<pk>/', views.AuthorViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),

b、优化

from rest_framework import routers
router = routers.DefaultRouter()
router.register('author', views.AuthorViewSet)

二级分发

path('', include(router.urls)),

3、路径

^author/$ [name='author-list']
^author\.(?P<format>[a-z0-9]+)/?$ [name='author-list']
^author/(?P<pk>[^/.]+)/$ [name='author-detail']
^author/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='author-detail']

路由总结

from django.urls import path, include
from app01 import views
from rest_framework import routers
router = routers.DefaultRouter()
#注册一个url,后续会生成我们想要的个url
router.register('', views.PublishViewSet)
# {'get': 'retrieve', 'put': 'update', 'delete': 'destroy'}
# {'get': 'list', 'post': 'create'}
urlpatterns = [ path('login/v1/', views.LoginView.as_view()), # path('publish/v1/', views.PublishView.as_view()),
# path('publish/v1/<pk>/', views.PublishDetailView.as_view()), # path('publish/v1/', views.PublishViewSet .as_view({'get': 'list', 'post': 'create'})),
# path('publish/v1/<pk>/', views.PublishViewSet.as_view({'get': 'retrieve', 'put': 'update', 'delete': 'destroy'})),
# #将生成的url加入到路由中
path('publish/v1/', include(router.urls)),
]

补充

a、?format=json

http://127.0.0.1:8000/author/?format=json

作用:获取json格式的数据,没有其它装饰

b、.json

http://127.0.0.1:8000/author.json

作用:获取全部json数据

http://127.0.0.1:8000/author/6.json

作用:获取指定pk的json数据

restframework 解析器、渲染器、url控制组件的更多相关文章

  1. rest-framework之响应器(渲染器)

    rest-framework之响应器(渲染器) 本文目录 一 作用 二 内置渲染器 三 局部使用 四 全局使用 五 自定义显示模版 回到目录 一 作用 根据 用户请求URL 或 用户可接受的类型,筛选 ...

  2. rest-framework组件 之 渲染器与版本

    浏览目录 渲染器 版本 渲染器 规定页面显示的效果(无用,了解即可). 局部渲染 只返回json数据. 效果: 看另一种情况: 既返回json数据,又嵌套在html中.注意:容易出bug. 效果如下: ...

  3. DRF频率、分页、解析器、渲染器

    DRF的频率 频率限制是做什么的 开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. 频率组件原理 DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通过自己定 ...

  4. Django REST framework基础:解析器和渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...

  5. DRF之频率限制、分页、解析器和渲染器

    一.频率限制 1.频率限制是做什么的 开放平台的API接口调用需要限制其频率,以节约服务器资源和避免恶意的频繁调用. 2.频率组件原理 DRF中的频率控制基本原理是基于访问次数和时间的,当然我们可以通 ...

  6. rest framework 解析器,渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 请求体相关字段: Accept:指定了接收的数据类型 Conte ...

  7. DRF的解析器和渲染器

    解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentTy ...

  8. DRF 的解析器和渲染器

    一.解析器 解析器作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 在了解解析器之前,我们要先知道Accept以及ContentT ...

  9. Django-Rest-Framework的解析器和渲染器

    Django-Rest-Framework的解析器和渲染器  restful framework 解析器 解析器的作用就是服务端接收客户端传来的数据,把数据解析成自己想要的数据类型的过程 本质就是对请 ...

随机推荐

  1. H3C 路由环路

  2. H3C 路由度量值(Metric)

  3. 2018-8-10-WPF-程序生成类库错误

    title author date CreateTime categories WPF 程序生成类库错误 lindexi 2018-08-10 19:16:53 +0800 2018-2-13 17: ...

  4. 802.1X技术简介

  5. vue 项目使用局域网多端访问并实时自动更新(利用 browser-sync)

    在写vue的项目中时,虽然vue会自动更新页面,但是切换页面切来切去也很麻烦,有时候我们还要在公司另一台电脑或者手机上调试,这时候利用browser-sync插件,无需改动vue的代码即可实现: 1. ...

  6. 谈谈模型融合之一 —— 集成学习与 AdaBoost

    前言 前面的文章中介绍了决策树以及其它一些算法,但是,会发现,有时候使用使用这些算法并不能达到特别好的效果.于是乎就有了集成学习(Ensemble Learning),通过构建多个学习器一起结合来完成 ...

  7. 彩票历史记录分析工具 -- 通过实例学习wpf开发

    前言 虽然本人对彩票不感兴趣,仍然有不少人对此情有独钟.他们花大量时间精力去分析彩票的历史记录,企图发现规律,为下一次投注做指导,希望“赢的“”概率增大.不管研究历史记录是否有意义,我用软件实现了对彩 ...

  8. Visio模具与模版

    yy 这些形状就是模具 点击更多形状 然后新建模具 也可以打开已有的模具 模具名字右边有星号 代表模具未保存 鼠标右键单击可以选择保存 选择属性可以进行设置(信息之类的)也可以进行关闭 模具文件三种打 ...

  9. mysql主丛之基于binlog的不停业务配置主从

    一 环境准备 主:192.168.132.121 从:192.168.132.122 主的数据库上面已经有数据,而且还在不断的写入 mysql> select * from darren.tes ...

  10. tomcat+jdk安装部署

    安装tomcat tar zxf jdk-8u66-linux-x64.tar.gz mkdir /application/java/ -p mv /home/oldboy/tools/jdk1.8. ...