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中一個簡單的圖片上傳到展示就做好了,接下來還想怎么耍,望多提寶貴意見或建議,我們一起來研究更炫更理想的效果