解析器的做用就是服務端接收客戶端傳過來的數據,把數據解析成本身能夠處理的數據。本質就是對請求體中的數據進行解析。前端
請求體相關字段:web
解析器工做原理的就是拿到請求的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'], }