一 .解析器
https://www.jb51.net/article/166237.htm 解释器配置
https://www.cnblogs.com/crazymagic/p/9572240.html 解释器配置 源码解析
DRF默认解释器 from rest_framework.parsers import JSONParser,FormParser,MultiPartParser,FileUploadParser parser_classes = [JSONParser,FormParser]
一、解析器概念
根据请求头 content-type 选择对应的解析器对请求体内容进行处理。 有application/json,x-www-form-urlencoded,form-data等格式
1. 解析器的配置
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请求,响应内容')
# 全局使用
REST_FRAMEWORK = { "DEFAULT_PARSER_CLASSES": ["rest_framework.JSONParser", "rest_framework.FormParser"] }
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请求,响应内容')
局部
from rest_framework.parsers import JSONParser, FormParser class ParserView(APIView): parser_classes = [JSONParser] """ JSONParser: 表示只能解析 application/json 请求头 FormParser: 表示只能解析 application/x-www-form-urlencoded 请求头 """ def post(self, request, *args, **kwargs): """ 允许用户发送JSON格式的数据 a. content-type: application/json b. {"name": 'alex', "age": 18} :param request: :param args: :param kwargs: :return: """ """ 1. 获取用户请求 2. 获取用户请求体 3. 根据用户请求头和 parser_classes = [JSONParser, FormParser] 中支持的请求头进行比较 4. JSONParser对象中去请求体 5. request.data """ print(request.data) return HttpResponse('JSON测试')