如何在Django中使用圖片

jerrysun發表於2021-09-11

如何在Django中使用圖片

1.首先是html頁面的form表單的三大屬性,action是提交到哪,method是提交方式,enctype只要有圖片上傳就要加這個屬性

   Django框架自帶csrf_token ,所以需要在前端頁面也生成csrf_token字串,來驗證真實客戶

 <form action="/pic_upload/" method="POST" enctype="multipart/form-data">
          {% csrf_token %}
          <input type="file" name="file">
          <input type="submit" value="提交">
      </form>

2.如下是上傳圖片的介面:

def pic_upload(request):
    if request.method == "GET":
        return render(request,"helloapp/pic_upload.html",locals())
    if request.method == "POST":
        error = ""
        fp = request.FILES.get("file")
        # fp 獲取到的上傳檔案物件
        if fp:
            path = os.path.join(STATICFILES_DIRS[0],'image/' + fp.name)   # 上傳檔案本地儲存路徑, image是static檔案
            夾下專門存放圖片的資料夾
            # fp.name #檔名
            #yield = fp.chunks() # 流式獲取檔案內容
            # fp.read() # 直接讀取檔案內容
            if fp.multiple_chunks():    # 判斷上傳檔案大於2.5MB的大檔案
                # 為真
                file_yield = fp.chunks()    # 迭代寫入檔案
                with open(path,'wb') as f:
                    for buf in file_yield:     # for情況執行無誤才執行 else
                        f.write(buf)
                    else:
                        print("大檔案上傳完畢")
            else:
                with open(path,'wb') as f:
                    f.write(fp.read())
                print("小檔案上傳完畢")
            models.ImgPath.objects.create(path=('image/' + fp.name))     #  image是static資料夾下專門存放圖片的資料夾
        else:
            error = "檔案上傳為空"
            return render(request,"helloapp/pic_upload.html",locals())
        return redirect("helloapp/pic_index/") # 重定向到首頁

3.做個圖片展示的頁面,對圖片展示對應的介面傳過來的引數加以判斷

   {% for img in imgs %}
        <img src="{% static img.path %}">
        {% empty %}
        <h1>您沒有上傳任何圖片</h1>
        {% endfor %}

4.圖片展示的介面:

def pic_index(request):
    imgs = models.ImgPath.objects.all()
    return render(request,'helloapp/pic_index.html',locals())

至此,Django中一個簡單的圖片上傳到展示就做好了。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/151/viewspace-2836853/,如需轉載,請註明出處,否則將追究法律責任。

相關文章