1. 程式人生 > >9.6 rest framework 解析器,渲染器

9.6 rest framework 解析器,渲染器

png pan publish 技術分享 全部 接收 數據類型 web mage

解析器

解析器的作用

解析器的作用就是服務端接收客戶端傳過來的數據,把數據解析成自己可以處理的數據。本質就是對請求體中的數據進行解析。

請求體相關字段:

  • Accept:指定了接收的數據類型
  • ContentType:指定了傳遞的數據類型

解析器工作原理的就是拿到請求的ContentType來判斷前端給我的數據類型是什麽,然後我們在後端使用相應的解析器去解析數據。

ps:

  django 原生是不支持 json 類型的數據,數據通過request.get 是拿不到的,只能在 request.body 全部請求體中自己去拿

解析器配置

配置之前先看下DRF 原生支持多少類型

技術分享圖片

默認使用的解析器

技術分享圖片

如果想更改,可在單個視圖或者全局的settings.py中配置要使用的解析器。

單個視圖配置

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格式的數據了,客戶端如果使用瀏覽器提交,那麽你將無法解析。

註意:在視圖類中定義的配置項的優先級要高於全局配置中的配置項。

渲染器

渲染器同解析器相反,它定義了框架按照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],
}

9.6 rest framework 解析器,渲染器