一、解析器

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

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. java位运算和无符号运算

    计算机在底层使用的是二进制补码进行运算. 计算规则: 正数的原码.反码.补码是其二进制本身. 负数的原码首先计算其二进制数,然后最高位使用1表示负数,反码是最高位不变其它位取反,补码是在反码的基础上进 ...

  2. 2018-9-14-win10-UWP-标题栏后退

    title author date CreateTime categories win10 UWP 标题栏后退 lindexi 2018-9-14 20:22:8 +0800 2018-2-13 17 ...

  3. MindV编入微软云计算中小企业解决方案

    鹰翔MindV思维导图软件基于云计算,曾作为windows azure云计算的一个样例介绍,收入中小企业解决方案中.http://www.microsoft.com/hk/smb/cloud/azur ...

  4. Microsoft Edge 离线安装包下载

    Microsoft Edge 现已准备就绪 下一版 Microsoft Edge 已准备好进行企业评估. 立即下载离线安装程序.查看管理策略并尝试 Internet Explorer 模式. http ...

  5. 29(30).socket网络基础

    转载:https://www.cnblogs.com/linhaifeng/articles/6129246.html 一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网 ...

  6. 第二阶段:1.流程图:11.PPT绘制页面流程图

    产品经理主要绘制两个图:1.业务流程图(谁在什么条件下完成什么任务)2.页面流程图(具体到产品呈现的功能设计等等细节方面) 选择插入 选择流程图中的形状 设置两个矩形 同时添加不同的背景色 添加文本框 ...

  7. spring boot 中事物的使用

    一.什么是事务? 事务,通俗的说就是,同时做多个事,要么全做,要么不做,也是其特性.举个例子来说,好比你在某宝.某东.某多上购物,在你提交订单的时候,库存也会相应减少,不可能是钱付了,库存不减少,或者 ...

  8. 【温故知新】Java web 开发(二)Servlet 和 简单JSP

    系列一介绍了新建一个 web 项目的基本步骤,系列二就准备介绍下基本的 jsp 和  servlet 使用. (关于jsp的编译指令.动作指令.内置对象不在本文讨论范围之内) 1. 首先,在 pom. ...

  9. Iterator接口介绍(迭代器)

    第一步 第二步 第二步用while 第二步用for循环(了解) 备注:

  10. The Annual Summary Of 2019

    Time is flying, it arrives at the end of year again. This is my first year working in PinDuoDuo inc ...