Django REST framework 解析器和渲染器

解析器的作用

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

在了解解析器之前,我們要先知道Accept以及ContentType請求頭。

  • Accept是告訴對方我能解析什么樣的數據,通常也可以表示我想要什么樣的數據。
  • ContentType是告訴對方我給你的是什么樣的數據類型。

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

Django中的數據解析

在視圖中我們可以通過request.POST來獲取前端發來的請求數據,那么Django框架是如何拿到請求體中的數據的呢?我們一起來看一下:

首先,request對象是 WSGIRequest 類的實例化對象,那我們去看一下代碼:

此時我們回想在Django的視圖中通過request.POST和request.FILES能夠取到數據都是因為在這里把請求的數據解析,并賦值給request對象了。

同時我們還會發現一個問題就是,Django的解析器是不支持 ContenType為 application/json 的,也就是說無法解析json格式的數據。

DRF中的解析器

我們都知道在DRF中獲取請求提交的數據是通過訪問request.data,那么request.data的數據是從哪里來的呢?我們通過源碼來看一下:

如果沒有配置解析器,DRF會使用默認的解析器:

我們可以在單個視圖或者全局的settings.py中配置要使用的解析器。

單個視圖配置

class BookViewSet(ModelViewSet):queryset = models.Book.objects.all()serializer_class = BookModelSerializerparser_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 = PublisherModelSerializerrenderer_classes = [JSONRenderer, ]

這樣設置后就只能返回JSON格式的數據了,并不會像之前一樣提供一個閱讀友好的web頁面。

全局設置

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

注意,在視圖類中定義的配置項的優先級要高于全局配置中的配置項。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/454431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454431.shtml
英文地址,請注明出處:http://en.pswp.cn/news/454431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MyBatis的學習之路(二)

上篇文章介紹了MyBatis的配置文件,現在來介紹實體映射文件Mapper.xml。 說道實體映射文件,就不得不說一下實體與表之間的映射關系:單表映射和多表映射。 a. 單表映射 1 public class Admin{ 2 private String id; 3 private String n…

計算機一級實驗素材題目,計算機一級EXCEL操作題整理素材(12頁)-原創力文檔...

素材摘錄,文檔可編輯分享PAGE 頁碼頁碼/NUMPAGES 總頁數總頁數單元格合并首先選中你要合并的單元格,然后找到EXCEL上的開始分區里的這種圖標或者是含有“合并”兩字的位置如圖1-1,如果題目要求的是要你合并單元格并讓內容居中,你就…

python爬取toefl_spark學習進度6-Python爬取數據的四個簡單實例

今天本來想把昨天安裝的intellij配置好,但是一直顯示沒有網絡,網上查了相關資料也沒有查出來解決辦法。然后暫停了intellij的配置,開始做了幾個Python爬取簡單數據的實例,先做了幾個最簡單的,以后再加大難度&#xff0…

Django REST framework 版本

API 版本控制允許我們在不同的客戶端之間更改行為(同一個接口的不同版本會返回不同的數據)。 DRF提供了許多不同的版本控制方案。 可能會有一些客戶端因為某些原因不再維護了,但是我們后端的接口還要不斷的更新迭代,這個時候通過…

AngularJS中的過濾器(filter)

AngularJS中的過濾器是用于對數據的格式化,或者篩選的函數,可以直接通過以下語法使用: {{expression|filter}} {{expression|filter1|filter2}} {{expression|filter1:param1,param2,...|filter2} 過濾器的種類有number,currency&…

計算機考試上傳照片教程,電腦照片傳到iPhone手機的詳細步驟【圖文】

蘋果自帶的iOS系統是不可以隨便和電腦進行數據交換的,必須使用iTunes軟件。許多用戶為此問題困擾,我們有什么可以把電腦照片傳到iPhone手機?下面我們就一起來看看把電腦照片傳到iphone設備的詳細步驟。具體方法如下:1,…

javaweb 導出文件名亂碼的問題解決方案

fileName new String(fileName.getBytes("ISO8859-1"), "UTF-8"); 或者 String finalFileName null; if(StringUtils.contains(userAgent, "MSIE")){//IE瀏覽器 finalFileName URLEncoder.encode(fileName,"UTF8"); }else if(Str…

AVS 分像素運動估計優化算法

—249—AVS 分像素運動估計優化算法楊涵悅 1,張兆楊1,滕國偉2(1. 上海大學通信學院,上海 200072;2. 上海廣電(集團)有限公司中央研究院,上海 200233)摘要:針對AVS 分像素運動估計的問題,提出一種…

計算機系統結構sw指令集,自考02325計算機系統結構復習資料六

自考生網為考生收集整理了“自考02325計算機系統結構復習資料六“以供考生們在考試前用復習資料鞏固所學到的知識,得到更好地復習效果。注:由于各省教材每年都有更新、變動,自考復習資料并不一定出于同一自考教材版本,但考生們仍可…

Django REST framework 源碼中提供的默認配置

DEFAULTS 是默認配置,IMPORT_STRINGS 是要相對應導入的類 鍵 大寫大寫大寫 ########################### settings.py ########################## DEFAULTS {# Base API policiesDEFAULT_RENDERER_CLASSES: (rest_framework.renderers.JSONRenderer,rest_framew…

python 去掉空格_如何從Python DataFrame中去除空格在這個例子中

使用applymap到數據幀,applymap施加一拉每個單元格上的mbda函數。在lambda函數中拆分字符串(白色空格在其中被忽略)然后加入它。如果有一個int,那么你可以在lambda函數中使用if else。 from pandas import Series, DataFrame impo…

Mware HA實戰攻略之五VMwareHA測試驗收

【IT168 專稿】在上一篇"VMware HA實戰攻略之四VMwareHA安裝及配置"中(點擊),講述了VMwareHA的概念及創建過程,還講述了創建過程中要注意的一些事項。在本篇中,將要講述如何在群集節點之一的ESX主機上安裝虛…

AVS解碼器在DSP平臺上的優化

AVS( Audio Video Coding STandard)是由我國數字 音視頻標準工作組制定的具有自主知識產權的第二代音視頻壓縮準。AVS實行1 元專利費用的原則,相比其它音視頻編解碼標準具有編碼效率高、專利費用低、授權模式簡單等優勢。AVS 解碼器的結構復雜、運算量較大&#xff…

如何重做計算機系統軟件,電腦卡如何一鍵重做Win7旗艦版

電腦卡如何一鍵重做Win7旗艦版?小伙伴們在使用電腦的過程中系統會越來越卡,對于新手小白來說怎么重裝系統是一個比較煩惱的問題,不知道如何下手,從哪里開始,那么接下來就以云騎士裝機大師為例給小伙伴們講解一下電腦卡…

Django Rest framework Request

[Django Rest framework文檔翻譯]-Request REST framework的Request類擴展自標準的HttpRequest,增加了REST framework靈活的請求解析和請求驗證支持。 請求解析 REST framework的Request對象提供了靈活的請求解析,讓你可以像一般處理普通form數據一樣…

python去停用詞用nltk_【NLTK】安裝和使用NLTK分詞和去停詞

黃聰:PythonNLTK自然語言處理學習(一):環境搭建 http://www.cnblogs.com/huangcong/archive/2011/08/29/2157437.html 安裝NLTK可能出現的問題: 1. pip install ntlk 2. 如果遇到缺少stopwords報錯如下:&am…

JavaScript知識概要

JavaScript 1.簡介 JavaScript簡介: JS是運行在瀏覽器端的一門腳本語言,一開始主要用來做瀏覽器驗證,但現在功能已經不止于此。 所謂腳本語言就是指,代碼不需要編譯,直接運行,并且讀入…

計算機文檔xsl,XSL-FO 文檔

XSL-FO 文檔XSL-FO 文檔XSL-FO 文檔是帶有輸出信息的 XML 文件。XSL-FO 文檔存儲在以 .fo 或 .fob 為文件擴展名的文件中。您也可以把 XSL-FO 文檔存儲為以 .xml 為擴展名的文件,這樣做的話可以使 XSL-FO 文檔更易被 XML 編輯器存取。XSL-FO 文檔結構XSL-FO 的文檔結…

vue項目cordova打包的android應用

準備工作nodejs、cordova、AndroidStudio這些在上一篇文章中已經說過了,這里就不重復說明。以此文記錄vue項目用cordova打包移動app的方法。 1.創建一個cordova項目,如創建一個名為testapp的工程:cordova create testapp 2.添加安卓平臺 cord…

H.264視頻開發---代碼移植

基于DSP系統開發的視頻編解碼系統,國內幾乎都是走的移植,優化的路線,并且移植的代碼,都是開源的。畢竟花費大量的人力,物力去開發一套自己的代碼,并不見得比一些成熟的開源代碼效率更高,健壯性更…