Django REST Framework 解析器与渲染器

01-解析器

REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求。还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型。

注意: 开发客户端应用程序时应该始终记住在HTTP请求中发送数据时确保设置Content-Type头。

如果你不设置内容类型,大多数客户端将默认使用‘application/x-www-form-urlencoded‘,而这可能并不是你想要的。

举个例子,如果你使用jQuery的.ajax() 方法发送json编码数据,你应该确保包含contentType:‘application / json‘设置。

02-全局配置解析器

# 全局配置
REST_FRAMEWORK = {
    # 版本
    "DEFAULT_VERSIONING_CLASS": "rest_framework.versioning.URLPathVersioning",
    # 解析器
    "DEFAULT_PARSER_CLASSES": (
        "rest_framework.parsers.JSONParser",
        "rest_framework.parsers.FormParser"
    )
}

注意

  1. 当你的项目中只配置了 JSONParser 解析器时,你的项目现在就只能解析JSON格式的数据了,客户端如果使用浏览器提交,那么你将无法解析。

  2. 在视图类中定义的配置项的优先级要高于全局配置中的配置项。

03-单个视图配置解析器

class BookViewSet(ModelViewSet):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    # JSONParser:表示只能解析content-type:application/json的头
    # FormParser:表示只能解析content-type:application/x-www-form-urlencoded的头
    parser_classes = [JSONParser, ]

04-自定义解析器

要实现一个自定义解析器,你应该重写BaseParser,设置.media_type属性,并实现.parse(self,stream,media_type,parser_context)方法。

该方法应该返回用于填充request.data 属性的数据。

class PlainTextParser(BaseParser):
    """
    Plain text 解析器。
    """
    media_type = ‘text/plain‘

    def parse(self, stream, media_type=None, parser_context=None):
        """
        只需返回一个表示请求正文的字符串。
        """
        return stream.read()

05-渲染器

视图的有效渲染器集合始终被定义为一个元素都是类的列表。当输入视图时,REST框架将对传入请求执行内容协商,并确定最适合的渲染器来满足请求。

drf提供的渲染器有很多,默认是:

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

06-全局设置

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

注意,在视图类中定义的配置项的优先级要高于全局配置中的配置项。

07-局部设置

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

这样设置后就只能返回JSON格式的数据了,并不会像之前一样提供一个阅读友好的web页面。

详解:https://q1mi.github.io/Django-REST-framework-documentation/api-guide/renderers_zh/

原文地址:https://www.cnblogs.com/pgxpython/p/10400054.html

时间: 2024-11-04 19:55:55

Django REST Framework 解析器与渲染器的相关文章

DRF 版本、认证、权限、限制、解析器和渲染器

目录 一.DRF之版本控制 为什么要有版本控制? DRF提供的版本控制方案 版本的使用 全局配置 局部配置(使用较少) 二.DRF之认证 内置的认证 步骤 三.DRF之权限 1.自定义一个权限类 2.权限 局部配置 3.权限 全局配置 四.DRF之限制 1.使用自定义限制类 1.1自定义一个限制类 1.2限制 局部配置 1.3限制 全局配置 2.使用内置限制类 2.1定义内置限制类 2.2全局配置 五.DRF之分页 1.为什么要使用分页 2.DRF使用分页器 2.1分页模式 2.2全局配置 2.

9.6 rest framework 解析器,渲染器

解析器 解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据.本质就是对请求体中的数据进行解析. 请求体相关字段: Accept:指定了接收的数据类型 ContentType:指定了传递的数据类型 解析器工作原理的就是拿到请求的ContentType来判断前端给我的数据类型是什么,然后我们在后端使用相应的解析器去解析数据. ps: django 原生是不支持 json 类型的数据,数据通过request.get 是拿不到的,只能在 request.body

DRF的解析器和渲染器

解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程. 本质就是对请求体中的数据进行解析. Django的解析器 我们请求进来请求体中的数据在request.body中,那也就证明,解析器会把解析好的数据放入request.body 我们在视图中可以打印request的类型,能够知道request是WSGIRequest这个类. 我们可以看下这个类的源码,我们是怎么拿到request.POST数据的 application/x-www-form-urlenc

【DRF解析器和渲染器】 񧠰

目录 解析器 Django中的解析器 DRF中的解析器 DRF中的渲染器 原文: http://blog.gqylpy.com/gqy/294 "@ *** 解析器 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己想要的数据类型的过程. 本质就是对请求体中的数据进行解析. Content-type:用于声明我给你传的是什么类型的数据 : application/x-ww-form-urlencoded 表单数据类型 : multipart/form-data 文件 : applic

django rest framework 解析器组件 接口设计,视图组件 (1)

一.解析器组件 -解析器组件是用来解析用户请求数据的(application/json), content-type 将客户端发来的json数据进行解析 -必须适应APIView -request.data触发 二.序列化组件 2.1.django 自带组件serializer 2.1.1 from django.serializers import serialize2.1.2 origin_data = Book.objects.all()2.1.3 serialized_data = se

rest framework-解析器和渲染器-长期维护

###############   解析器   ############### # 解析器----数据解析器, # # 前端发送了json数据,在request的body里面, # 我们需要把json数据解析成字典,这样每次都要解析,所以可以创建一个中间件,只要是json就解析,然后在视图里面就可以直接使用了, # 所以什么是解析器?就是把数据转换成我们需要的格式, # 原生的django不支持对json的解析, # 但是我们的rest framework支持,没有进行任何的处理,就直接给你在r

基于OpenGL编写一个简易的2D渲染框架-11 重构渲染器-Renderer

假如要渲染一个纯色矩形在窗口上,应该怎么做? 先确定顶点的格式,一个顶点应该包含位置信息 vec3 以及颜色信息 vec4,所以顶点的结构体定义可以这样: struct Vertex { Vec3 position; Vec4 color; }; 然后填充矩形四个顶点是数据信息: Vertex* data = ( Vertex* ) malloc(sizeof( Vertex ) * 4); data[0].position.set(0, 0, 0); data[1].position.set(

jQuery插件jqplot的详细配置说明和渲染器

jQuery插件jqplot的详细配置说明和渲染器 (2012-08-23 08:57:42) 转载▼ 标签: jqplot 详细配置 渲染器 it 分类: 技术类 jQuery.jqplot插件的官方网址:http://www.jqplot.com/ jQuery.jqplot('target', data, options);//target:要显示的位置.data:显示的数据.options:其它配置 options: seriesColors: ["#4bb2c5", &quo

rest_framework之渲染器

渲染器简介 什么是渲染器 根据 用户请求URL 或 用户可接受的类型,筛选出合适的 渲染组件. 渲染器的作用 序列化.友好的展示数据 渲染器配置 首先要在settins.py中将rest_framework组件加进去 局部配置渲染器 引入渲染器类,然后将他们作为一个列表的元素赋值给renderer_classes 配置属性,如下: from rest_framework.renderers import JSONRenderer,BrowsableAPIRenderer class Course