drf8 解析器
解析器的介紹
解析器的作用就是服務端接收客戶端傳過來的數據,把數據解析成自己想要的數據類型的過程。
本質就是對請求體中的數據進行解析。
Accept與ContentType請求頭。
Accept是告訴對方我能解析什么樣的數據,通常也可以表示我想要什么樣的數據。
ContentType是告訴對方我給你的是什么樣的數據類型。
解析器工作原理的本質就是拿到請求的ContentType來判斷前端給我的數據類型是什么,然后我們去拿相應的解析器去解析數據。
請求進來請求體中的數據在request.body中,那也就證明,解析器會把解析好的數據放入request.body
在視圖中可以打印request的類型,能夠知道request是WSGIRequest這個類。
可以看下這個類的源碼是怎么拿到request.POST數據的
class DjangoView(View):def get(self, request):print(type(request)) #<class 'django.core.handlers.wsgi.WSGIRequest'>print(request.body)# Request# request.GET# request.POST# json request.bodyreturn HttpResponse("django解析器測試~~")django WSGIRequest 中 request的POST
application/x-www-form-urlencoded不是不能上傳文件,是只能上傳文本格式的文件,
multipart/form-data是將文件以二進制的形式上傳,這樣可以實現多種類型的文件上傳
一個解析到request.POST,?? request.FILES中。
也就是說我們之前能在request中能到的各種數據是因為用了不同格式的數據解析器
DRF的解析器
什么時候我們的解析器會被調用呢,是不是在request.data拿數據的時候
我們說請求數據都在request.data中,那我們看下這個Request類里的data~~
rest_framework/request.py
得到解析器后,調用解析器里的parse方法
DRF配置的默認的解析器的類
DRF支持Json,Form表單的請求,包括多種文件類型的數據
在我們的視圖中配置視圖級別的解析器
DRF的渲染器
渲染器就是友好的展示數據
DRF給我們提供的渲染器有
在瀏覽器中展示的DRF測試的那個頁面~就是通過瀏覽器的渲染器來做到的
可以展示Json數據類型
from django.shortcuts import render from django.views import View from django.http import HttpResponse from django.core.handlers.wsgi import WSGIRequest from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.negotiation import DefaultContentNegotiation from rest_framework import parsersclass DjangoView(View):def get(self, request):print(type(request)) #<class 'django.core.handlers.wsgi.WSGIRequest'>print(request.data)# Request# request.GET# request.POST# json request.bodyreturn HttpResponse("django解析器測試~~")class DRFView(APIView):parser_classes = [parsers.JSONParser, ]def get(self, request):# request 重新封裝的request Request# request.data#return Response("DRF解析器的測試~~") view總結