前后端傳輸數據的編碼格式(contentType)


我們主要研究post請求數據的編碼格式

get請求是直接放在url后面的

url?username=haha&password=123

可以朝后端發送post請求的方式

1.form表單   2.ajax請求

前后端傳輸數據的編碼格式

1.urlencoded  2.formdata   3.json

一、研究form表單

默認的數據編碼格式是urlencoded

數據格式:username=haha&password=123

django 后端針對符合urlencoded編碼格式的數據都會幫你解析封裝到request.POST中

            username=haha&password=123---->request.POST

如果把編碼格式改成formdata,那么針對普通鍵值對還是解析到request.POST中 而將文件解析到request.FILES中

form表單沒法發送json格式數據

二、研究ajax

默認編碼格式也是urlencoded

數據格式:username=haha&password=123

django后端對符合urlencoded編碼格式的數據都會自動幫你解析封裝到request.POST中

    username=haha&password=123----->request.POST

ajax發送json格式數據

前后端傳輸數據的時候一定要確保編碼格式跟數據真正的格式一致

{'username':'haha','age':25}在request.POST里面肯定找不到

django針對json格式的數據 不會做任何的處理

request對象方法補充

         request.is_ajax()判斷當前請求是否是ajax請求 返回布爾值

ajax發送json格式數據需要注意

1.contentType參數指定成application/json

2.數據是真正的json格式數據

3django后端不會幫你處理json格式數據需要你自己去request.body獲取並處理

前端

<script>
    $('#d1').click(function () {
        $.ajax({
            url:'',
            type:'post',
            data:JSON.stringify({'username':'jason','age':25}),
            contentType:'application/json',  // 指定編碼格式
            success:function () {

            }
        })
    })
</script>

 

 

后端

  json_bytes = request.body
        json_str = json_bytes.decode('utf-8')
        json_dict = json.loads(json_str)

        # json.loads括號內如果傳入了一個二進制格式的數據那么內部自動解碼再反序列化
        json_dict = json.loads(json_bytes)

ajax發送文件

ajax發送文件需要借助js內置對象FormData

前端

<script>
    // 點擊按鈕朝后端發送普通鍵值對和文件數據
    $('#d4').on('click',function () {
        // 1 需要先利用FormData內置對象
        let formDateObj = new FormData();
        // 2 添加普通的鍵值對
        formDateObj.append('username',$('#d1').val());
        formDateObj.append('password',$('#d2').val());
        // 3 添加文件對象
        formDateObj.append('myfile',$('#d3')[0].files[0])
        // 4 將對象基於ajax發送給后端
        $.ajax({
            url:'',
            type:'post',
            data:formDateObj,  // 直接將對象放在data后面即可

            // ajax發送文件必須要指定的兩個參數
            contentType:false,  // 不需使用任何編碼 django后端能夠自動識別formdata對象
            processData:false,  // 告訴你的瀏覽器不要對你的數據進行任何處理

            success:function (args) {
            }
        })


    })
</script>

后端

def ab_file(request):
    if request.is_ajax():
        if request.method == 'POST':
            print(request.POST)
            print(request.FILES)
    return render(request,'ab_file.html')
  

總結:

1.需要利用內置對象FormData

2.添加普通鍵值對

formDateObj.append('username',$('#d1').val());

formDateObj.append('password',$('#d2').val());

3.添加文件對象

formDateObj.append('myfile',$('#d3')[0].files[0])

4.需要指定兩個關鍵性參數

contentType:false 不需要使用任何編碼 django后端能夠自動識別formdata對象

processData:false 告訴你的瀏覽器不要對你的數據進行任何處理

5.django后端能夠直接識別到formdata對象並且能夠將內部的普通鍵值自動解析並封裝到request.POST中 文件數據自動解析並封裝到requ.FILES中

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM