1. 程式人生 > >Django - DRF - 解析器

Django - DRF - 解析器

目錄

一、解析器概念

二、 解析器的配置

2-1 全域性使用(settings內配置)

2-2 區域性使用 -  parser_classes


一、解析器概念

根據請求頭 content-type 選擇對應的解析器對請求體內容進行處理。

有application/json,x-www-form-urlencoded,form-data等格式

二、 解析器的配置

2-1 全域性使用(settings內配置)

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES':[
        'rest_framework.parsers.JSONParser'
        'rest_framework.parsers.FormParser'
        'rest_framework.parsers.MultiPartParser'
    ]

}

'''
路由配置
'''
urlpatterns = [
    url(r'test/', TestView.as_view()),
]

'''
檢視函式
'''
from rest_framework.views import APIView
from rest_framework.response import Response

class TestView(APIView):
    def post(self, request, *args, **kwargs):
        print(request.content_type)

        # 獲取請求的值,並使用對應的JSONParser進行處理
        print(request.data)
        # application/x-www-form-urlencoded 或 multipart/form-data時,request.POST中才有值
        print(request.POST)
        print(request.FILES)
        return Response('POST請求,響應內容')

    def put(self, request, *args, **kwargs):
        return Response('PUT請求,響應內容')

2-2 區域性使用 -  parser_classes

'''
僅處理請求頭content-type為application/json的請求體
'''
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.request import Request
from rest_framework.parsers import JSONParser


class TestView(APIView):
    parser_classes = [JSONParser, ]

    def post(self, request, *args, **kwargs):
        print(request.content_type)

        # 獲取請求的值,並使用對應的JSONParser進行處理
        print(request.data)

        # application/x-www-form-urlencoded 或 multipart/form-data時,request.POST中才有值
        print(request.POST)
        print(request.FILES)

        return Response('POST請求,響應內容')

    def put(self, request, *args, **kwargs):
        return Response('PUT請求,響應內容')