七 .Django---framework框架 解析器

一 .解析器

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测试')

 

posted @ 2019-10-11 03:57  supreme999  阅读(198)  评论(0)    收藏  举报