解析器的做用就是服務端接收客戶端傳過來的數據,把數據解析成本身想要的數據類型的過程。前端
本質就是對請求體中的數據進行解析。django
Accept與ContentType請求頭。json
Accept是告訴對方我能解析什麼樣的數據,一般也能夠表示我想要什麼樣的數據。瀏覽器
ContentType是告訴對方我給你的是什麼樣的數據類型。app
解析器工做原理的本質就是拿到請求的ContentType來判斷前端給個人數據類型是什麼,而後咱們去拿相應的解析器去解析數據。ide
請求進來請求體中的數據在request.body中,那也就證實,解析器會把解析好的數據放入request.body測試
在視圖中能夠打印request的類型,可以知道request是WSGIRequest這個類。url
能夠看下這個類的源碼是怎麼拿到request.POST數據的spa
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.body return HttpResponse("django解析器測試~~")
django WSGIRequest 中 request的POST3d
application/x-www-form-urlencoded不是不能上傳文件,是隻能上傳文本格式的文件,
multipart/form-data是將文件以二進制的形式上傳,這樣能夠實現多種類型的文件上傳
一個解析到request.POST, request.FILES中。
也就是說咱們以前能在request中能到的各類數據是由於用了不一樣格式的數據解析器
何時咱們的解析器會被調用呢,是否是在request.data拿數據的時候
咱們說請求數據都在request.data中,那咱們看下這個Request類裏的data~~
rest_framework/request.py
獲得解析器後,調用解析器裏的parse方法
DRF配置的默認的解析器的類
DRF支持Json,Form表單的請求,包括多種文件類型的數據
在咱們的視圖中配置視圖級別的解析器
渲染器就是友好的展現數據
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 parsers class 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.body return HttpResponse("django解析器測試~~") class DRFView(APIView): parser_classes = [parsers.JSONParser, ] def get(self, request): # request 從新封裝的request Request # request.data # return Response("DRF解析器的測試~~")