解析器的作用就是服務端接收客戶端傳過來的資料,把資料解析成自己可以處理的資料。本質就是對請求體中的資料進行解析。
在了解解析器之前,我們要先知道accept以及contenttype請求頭。
accept是告訴對方我能解析什麼樣的資料,通常也可以表示我想要什麼樣的資料。
contenttype是告訴對方我給你的是什麼樣的資料型別。
解析器工作原理的就是拿到請求的contenttype來判斷前端給我的資料型別是什麼,然後我們在後端使用相應的解析器去解析資料。
在檢視中我們可以通過request.post來獲取前端發來的請求資料,那麼django框架是如何拿到請求體中的資料的呢?我們一起來看一下:
首先,request物件是 wsgirequest 類的例項化物件,那我們去看一下**:
在django的檢視中通過request.post和request.files能夠取到資料都是因為在這裡把請求的資料解析,並賦值給request物件了。
在drf中獲取請求提交的資料是通過訪問request.data,那麼request.data的資料是從**來的呢?
通過原始碼來看一下:
如果沒有配置解析器,drf會使用預設的解析器:
在單個檢視或者全域性的settings.py中配置要使用的解析器。
classbookviewset(modelviewset):
queryset =models.book.objects.all()
serializer_class =bookmodelserializer
parser_classes = [jsonparser, ]
rest_framework =注意:當你的專案中只配置了 jsonparser 解析器時,你的專案現在就只能解析json格式的資料了,客戶端如果使用瀏覽器提交,那麼你將無法解析。
注意,在檢視類中定義的配置項的優先順序要高於全域性配置中的配置項。
渲染器同解析器相反,它定義了框架按照content_type來返回不同的響應。
drf提供的渲染器有很多,預設是
'我們也可以在檢視中區域性設定也可以在全域性的settings.py中進行設定:default_renderer_classes
': (
'rest_framework.renderers.jsonrenderer',
'rest_framework.renderers.browsableapirenderer',
),
class這樣設定後就只能返回json格式的資料了,並不會像之前一樣提供乙個閱讀友好的web頁面。publisherviewset(modelviewset):
queryset =models.publisher.objects.all()
serializer_class =publishermodelserializer
renderer_classes = [jsonrenderer, ]
rest_framework =注意,在檢視類中定義的配置項的優先順序要高於全域性配置中的配置項。
DRF的解析器和渲染器
解析器的作用就是服務端接收客戶端傳過來的資料,把資料解析成自己想要的資料型別的過程。本質就是對請求體中的資料進行解析。我們請求進來請求體中的資料在request.body中,那也就證明,解析器會把解析好的資料放入request.body 我們在檢視中可以列印request的型別,能夠知道reques...
DRF的解析器和渲染器
解析器 解析器的作用就是服務端接收客戶端傳過來的資料,把資料解析成自己想要的資料型別的過程。本質就是對請求體中的資料進行解析。我們請求進來請求體中的資料在request.body中,那也就證明,解析器會把解析好的資料放入request.body 我們在檢視中可以列印request的型別,能夠知道re...
解析器和渲染器
解析器的作用就是服務端接收客戶端傳過來的資料,把資料解析成自己想要的資料型別的過程。本質就是對請求體中的資料進行解析。我們請求進來請求體中的資料在request.body中,那也就證明,解析器會把解析好的資料放入request.body 我們在檢視中可以列印request的型別,能夠知道reques...