1. 程式人生 > >django rest framework 之 解析器

django rest framework 之 解析器

quest code amp cati bmi name parse 內部 表單提交

一、前言

在前端向後臺發送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)

django rest framework 之 解析器