rest-framework的解析器

一、django中的解析器


在第五章的第一小节中我们学习了django中的解析器,前端提交的数据模式有两种

  • 1、表单模式Content-Type: application/x-www-form-urlencoded
  • 2、json模式'Content-Type': 'application/json'

前面介绍了,我们如果在request.POST获取不到值就去request.body中获取值,但是这样很不方便,要不就跟前端约定是什么请求头,或者是后端你自己做一个判断

二、rest-framework中使用json提交方式

  • 1、导包

    from rest_framework.parsers import JSONParser
    
  • 2、在视图类中使用

    from rest_framework.parsers import JSONParser
    
    class User1View(APIView):
        permission_classes = []
        authentication_classes = []
    
        parser_classes = [JSONParser, ]
    
        def post(self, request, *args, **kwargs):
            print(request.data)
            return HttpResponse('成功')
    
  • 3、提交的数据

    图片

  • 4、后端获取到的数据

    {'name': '张三', 'age': '20', 'gender': '男'}
    

三、使用表单提交方式

  • 1、导包

    from rest_framework.parsers import FormParser
    
  • 2、视图类中使用

    from rest_framework.parsers import JSONParser, FormParser
    
    class User1View(APIView):
        permission_classes = []
        authentication_classes = []
    
        parser_classes = [JSONParser, FormParser]
    
        def post(self, request, *args, **kwargs):
            print(request.data)
            return HttpResponse('成功')
    
  • 3、postman的提交数据

    图片

  • 4、获取到的数据

    <QueryDict: {'username': ['admin'], 'password': ['123456']}>
    

四、兼容两种请求头提交数据模式

  • 1、在parser_classes配置多个请求头方式

    ...
    parser_classes = [JSONParser, FormParser]
    ...
    
  • 2、请求头方式除了上面两种还有MultiPartParserFileUploadParser

五、全局配置

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

results matching ""

    No results matching ""