rest framework 解析器,渲染器

 解析器

解析器的做用

解析器的做用就是服务端接收客户端传过来的数据,把数据解析成本身能够处理的数据。本质就是对请求体中的数据进行解析。前端

请求体相关字段:web

  • Accept:指定了接收的数据类型
  • ContentType:指定了传递的数据类型

解析器工做原理的就是拿到请求的ContentType来判断前端给个人数据类型是什么,而后咱们在后端使用相应的解析器去解析数据。django

ps:json

  django 原生是不支持 json 类型的数据,数据经过request.get 是拿不到的,只能在 request.body 所有请求体中本身去拿后端

解析器配置

配置以前先看下DRF 原生支持多少类型浏览器

 默认使用的解析器框架

若是想更改,可在单个视图或者全局的settings.py中配置要使用的解析器。spa

单个视图配置

class BookViewSet(ModelViewSet):
    queryset = models.Book.objects.all()
    serializer_class = BookModelSerializer
    parser_classes = [JSONParser, ]

全局配置

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
    )
}

 

注意:当你的项目中只配置了 JSONParser 解析器时,你的项目如今就只能解析JSON格式的数据了,客户端若是使用浏览器提交,那么你将没法解析。3d

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

 

渲染器

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

默认渲染器

DRF提供的渲染器有不少,默认是

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

咱们也能够在视图中局部设置也能够在全局的settings.py中进行设置:

局部设置

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

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

全局设置

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

 

REST_FRAMEWORK = {
    # 关闭渲染器,只用json 的格式显示在当前页面
    # "DEFAULT_RENDERER_CLASSES": 'rest_framework.renderers.JSONRenderer',
    
    # 打开渲染器,
    "DEFAULT_RENDERER_CLASSES": ['rest_framework.renderers.JSONRenderer',
                                 'rest_framework.renderers.BrowsableAPIRenderer'],
}
相关文章
相关标签/搜索