9.6 rest framework 解析器,渲染器
阿新 • • 發佈:2019-02-07
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 解析器,渲染器