DRF 的解析器和渲染器

2022-04-28 14:45:25 字數 2012 閱讀 4795

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

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

accept是告訴對方我能解析什麼樣的資料,通常也可以表示我想要什麼樣的資料。

contenttype是告訴對方我給你的是什麼樣的資料型別。

解析器工作原理的就是拿到請求的contenttype來判斷前端給我的資料型別是什麼,然後我們在後端使用相應的解析器去解析資料。

在檢視中我們可以通過request.post來獲取前端發來的請求資料,那麼django框架是如何拿到請求體中的資料的呢?我們一起來看一下:

首先,request物件是 wsgirequest 類的例項化物件,那我們去看一下**:

在django的檢視中通過request.post和request.files能夠取到資料都是因為在這裡把請求的資料解析,並賦值給request物件了。

在drf中獲取請求提交的資料是通過訪問request.data,那麼request.data的資料是從**來的呢?

通過原始碼來看一下:

如果沒有配置解析器,drf會使用預設的解析器:

在單個檢視或者全域性的settings.py中配置要使用的解析器。

class

bookviewset(modelviewset):

queryset =models.book.objects.all()

serializer_class =bookmodelserializer

parser_classes = [jsonparser, ]

rest_framework =
注意:當你的專案中只配置了 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 =
注意,在檢視類中定義的配置項的優先順序要高於全域性配置中的配置項。

DRF的解析器和渲染器

解析器的作用就是服務端接收客戶端傳過來的資料,把資料解析成自己想要的資料型別的過程。本質就是對請求體中的資料進行解析。我們請求進來請求體中的資料在request.body中,那也就證明,解析器會把解析好的資料放入request.body 我們在檢視中可以列印request的型別,能夠知道reques...

DRF的解析器和渲染器

解析器 解析器的作用就是服務端接收客戶端傳過來的資料,把資料解析成自己想要的資料型別的過程。本質就是對請求體中的資料進行解析。我們請求進來請求體中的資料在request.body中,那也就證明,解析器會把解析好的資料放入request.body 我們在檢視中可以列印request的型別,能夠知道re...

解析器和渲染器

解析器的作用就是服務端接收客戶端傳過來的資料,把資料解析成自己想要的資料型別的過程。本質就是對請求體中的資料進行解析。我們請求進來請求體中的資料在request.body中,那也就證明,解析器會把解析好的資料放入request.body 我們在檢視中可以列印request的型別,能夠知道reques...