10、Django的文件上傳

1、上傳文件相關javascript

  1. 請求頭ContentType

ContentType指的是請求體的編碼類型,常見的類型共有3種:html

  1. application/x-www-form-urlencoded
    最多見的 POST 提交數據的方式了
    瀏覽器的原生 form 表單,若是不設置 enctype 屬性,那麼最終就會以 默認格式application/x-www-form-urlencoded 方式提交數據,ajax默認也是這個
    urlencoded是一種數據格式,
    好比:
    username=yang&password=123&csrfmiddlewaretoken=.......
    # 這樣的一種格式,相似get請求提交數據的格式前端

    # 這樣在後臺,就能夠經過request.POST,就能夠直接拿到數據了
        <QueryDict:{'username':['yang']},'password':['123'],......>
  2. multipart/form-data
    專門用來傳輸文件的消息格式,會把文件做爲片斷數據發送,而不是整個文件一塊兒發送
  3. application/json
    告訴服務端消息主體是序列化後的 JSON 字符串
    以前給ajax傳遞數據,就是把字典寫成了一個相似json類型的數據
    def login(request):
    ...
    ret = '{"code":0,"redirect_url":"/index/"}'
    return HttpResponse(ret)java

    在不加content_type='application/json'時,傳遞過去的就是一個字符串
    def login(request):
    d1 = {"code":0,"redirect_url":"/index/"}
    import json
    d1_json = json.dumps(d1)
    return HttpResponse(d1_json,)python

    success:function (res) {
     console.log(res,typeof res);
        # {"code": 0, "redirect_url": "/index/"} string
        ....
     }
    
    這個時候,就不方便咱們後續的使用,咱們指望仍是能拿到一個字典(自定義對象的類型)

    使用content_type='application/json',ajax就會調用本身內部的反序列化機制,直接調用反序列化方法
    def login(request):
    d1 = {"code":0,"redirect_url":"/index/"}
    import json
    d1_json = json.dumps(d1)
    return HttpResponse(d1_json,content_type='application/json')jquery

    success:function (res) {
     console.log(res,typeof res);
        # {code: 0, redirect_url: "/index/"} "object"
        ....
     }
    
    此時,ajax端不須要本身序列化,也拿到了object類型的對象,這是由於內部自動調用的
  4. application/json 在ajax端發送數據,咱們如何在視圖函數中應用
    ajax

相關文章
相關標籤/搜索