drf8 解析器

 

解析器的介紹

解析器的做用就是服務端接收客戶端傳過來的數據,把數據解析成本身想要的數據類型的過程。前端

本質就是對請求體中的數據進行解析。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

image

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 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解析器的測試~~")
view
相關文章
相關標籤/搜索