django中實(shí)現(xiàn)圖片上傳

在django開發(fā)中,圖片上傳是我們經(jīng)常需要做的,比如用戶頭像的上傳,文章封面的上傳;

下面我們來看一下具體的實(shí)現(xiàn)方式:

Ajax 上傳圖片

Ajax上傳的好處在與我們上傳后可以根據(jù)服務(wù)器返回的路徑將上傳成功的圖片立即顯示在頁面上讓用戶可以看到;

具體上傳方式如下:

html

# 1.添加隱藏域input,并將input的type設(shè)置為‘file’類型,設(shè)置onchange事件并將獲取到的圖片傳到事件中
<input type="file" id="file" onchange="up_img(this.files[0])" style="display: none">
<section class="fixed">
    # 2.設(shè)置頭像展示組件,并設(shè)置點(diǎn)擊事件,當(dāng)點(diǎn)擊時(shí)調(diào)用第一步中的input點(diǎn)擊事件
    <span><img src="/{{ user.icon }}" onclick="file.click()"></span>
    <p><a href="#">{{ user.name }}</a></p>
    <p><span class="glyphicon glyphicon-fire"></span><span>等級</span></p>
    <p><span class="glyphicon glyphicon-heart"></span>商品收藏</p>
</section>

# 3. 在input點(diǎn)擊事件中使用Ajax將圖片上傳到服務(wù)器
<script>
// 上傳頭像
function up_img(file){
  let xhr = new XMLHttpRequest();  # 創(chuàng)建XMLHttpRequest對象
  xhr.open('post', '/main/upfile', true);  # post異步上傳到/main/upfile路徑
  xhr.onload = function () {
      # 上傳成功后,在此處接收服務(wù)器返回的數(shù)據(jù)并進(jìn)行處理
      let data = xhr.responseText;
      data = JSON.parse(data);
      console.log(data);
      $('.fixed img').attr('src', data['img'])  # 將返回的服務(wù)器圖片地址添加到img中顯示給用戶
  };
  let formdata = new FormData();  # 使用formdata存儲圖片文件
  formdata.append('file', file);
  xhr.send(formdata);  # 發(fā)送請求
}
</script>

views.py

@csrf_exempt  # 去除csrf驗(yàn)證
def upfile(request):
    sava_path = '/static/main/img/cart.png'  # 默認(rèn)圖片
    if request.method == 'POST':
        files = request.FILES.get('file')  # 獲取圖片
        # 圖片存放路徑
        filename = encryption(str(time.time())) + '.' + files.content_type.split('/')[1]
        sava_path = 'static/main/user_file/' + filename

        # 將圖片分段讀取并寫入文件
        with open(sava_path, 'wb') as f:
            for file in files.chunks():
                f.write(file)
                f.flush()
        # 將圖片路徑更新到當(dāng)前用戶的表中
        user = User.objects.filter(token=request.COOKIES.get('token'))
        user.update(icon=sava_path)
    # 將上傳成功的圖片路徑返回給頁面
    return JsonResponse({'img': sava_path})

效果展示:

多布局.gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 蘭亭臨帖 提筆欲書情真切 落日余暉 誰惹驟雨芭蕉葉 衣袖輕卷 寫下不悔如初的思念 又在提捺間 不借胭脂的容顏 瓦上...
    從此凋朱顏閱讀 608評論 0 2
  • 誰在呼喚我 彷徨的仲夏 落日點(diǎn)燃了晚霞 思念燒成畫 星光依偎著燈塔 螢火蟲不回家 風(fēng)載著火花 撕開了塵沙 如果還會...
    53aad588f285閱讀 428評論 0 4
  • 《經(jīng)濟(jì)學(xué)的思維方式》,用了6天時(shí)間仔細(xì)讀了一遍,類似于教科書,但遠(yuǎn)勝于教科書。將供給需求、機(jī)會成本、邊際效應(yīng)、比較...
    FrankCoach閱讀 503評論 0 0
  • Using English at Work [TOC] ==Ⅰ. Words== critiquepervasiv...
    遷喵閱讀 374評論 0 0
  • 在5.x正常工作,在2017.2.2上會出現(xiàn)報(bào)錯(cuò)如下: InvalidOperationException: Ca...
    北風(fēng)瘦馬閱讀 2,331評論 3 0

友情鏈接更多精彩內(nèi)容