Django Rest framework 之 解析器

 

一、前言

在前端向后台发送form表单或者ajax数据的时候,django的content_type会拿到请求头中的Content-Type属性然后根据值进行解析。
将request.data中的值放到request.POST中需要满足两个条件

  • 请求头要求:
    Content-Type: application/x-www-form-urlencoded
    PS: 如果请求头中的 Content-Type: application/x-www-form-urlencoded,request.POST中才有值(去request.body中解析数据)。
  • 数据格式要求:
    name=weilan&age=18&gender=男

1、表单提交

form表单提交时会自动的将请求头中的Content-Type: application/x-www-form-urlencoded,数据也会自动转换为?parser=xxx&parser2=xxx的格式

<form action="/api/parser/" method="post">         <input type="text" name="parser"/>         <input type="text" name="parser2"/>         <input type="submit"/> </form>>                         

2、ajax提交

默认的请求头中Content-Type: application/x-www-form-urlencoded

$.ajax({     url:...     type:POST,     data:{name:alex,age=18} # 内部转化 name=weilan&age=18&gender=男 }) 

情况一:

    $.ajax({         url:...         type:POST,         headers:{'Content-Type':"application/json"}         data:{name:weilan,age=18} # 内部转化 name=weilan&age=18&gender=男     })     # body有值;POST

情况二:

    $.ajax({         url:...         type:POST,         headers:{'Content-Type':"application/json"}         data:JSON.stringfy({name:weilan,age=18}) # {name:weilan,age:18...} # 不在做内部转换,而是传递字符串     })     # body有值;POST无     # 这种情况下request.body有值, 需要字节类型转换成字符串类型。     # json.loads(request.body) 

二、实例

1、仅处理请求头content-type为application/json的请求体

#!/usr/bin/env python # -*- coding:utf-8 -*- 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请求,响应内容') 

2、仅处理请求头content-type为application/x-www-form-urlencoded 的请求体

#!/usr/bin/env python # -*- coding:utf-8 -*- from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.request import Request from rest_framework.parsers import FormParser   <
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信