django之上傳圖片
阿新 • • 發佈:2018-09-01
chunk pil 打開 處理 return action efi pic set
上傳圖片
- 當Django在處理文件上傳的時候,文件數據被保存在request.FILES
- FILES中的每個鍵為<input type="file" name="" />中的name
- 註意:FILES只有在請求的方法為POST 且提交的<form>帶有enctype="multipart/form-data" 的情況下才會包含數據。否則,FILES 將為一個空的類似於字典的對象
- 使用模型處理上傳文件:將屬性定義成models.ImageField類型
pic=models.ImageField(upload_to=‘cars/‘)
- 註意:如果屬性類型為ImageField需要安裝包Pilow
pip install Pillow==3.4.1
- 圖片存儲路徑
- 在項目根目錄下創建media文件夾
- 圖片上傳後,會被保存到“/static/media/cars/圖片文件”
- 打開settings.py文件,增加media_root項
MEDIA_ROOT=os.path.join(BASE_DIR,"static/media")
- 使用django後臺管理,遇到ImageField類型的屬性會出現一個file框,完成文件上傳
- 手動上傳的模板代碼
<html> <head> <title>文件上傳</title> </head> <body> <form method="post" action="upload/" enctype="multipart/form-data"> <input type="text" name="title"><br> <input type="file" name="pic"/><br> <input type="submit" value="上傳"> </form> </body> </html>
- 手動上傳的視圖代碼
from django.conf import settings
def upload(request):
if request.method == "POST":
f1 = request.FILES[‘pic‘]
fname = ‘%s/cars/%s‘ % (settings.MEDIA_ROOT,f1.name)
with open(fname, ‘w‘) as pic:
for c in f1.chunks():
pic.write(c)
return HttpResponse("ok")
else:
return HttpResponse("error")
django之上傳圖片