1. 程式人生 > >Django 上傳圖片操作

Django 上傳圖片操作

Django上傳圖片

  • 在admin中上傳圖片
  • 在admin.py檔案中註冊,PicTest
from django.contrib import admin
from booktest.models import *

admin.site.register(PicTest)
  • 在admin建立管理員賬戶
# create super user
python manage.py createsuperuser
  • 在settings中修改配置檔案
STATIC_URL = '/static/'

MEDIA_ROOT=os.path.join(BASE_DIR,"static/upImg")
  • 在models.py中建立資料模型
from django.db import models

# Create your models here.

class PicTest(models.Model):
pic = models.ImageField(upload_to='path') # 引數 upload_to 路徑重複的話會重新開啟檔案

自定義檔案上傳

  • 檔案上傳時,檔案資料儲存在request.FILES屬性中

  • form表單要上傳檔案需要新增屬性 enctype=“multipart/form-data”

  • 上傳檔案必須是post請求

  • settings.py部分

# 新增路徑
MEDIA_ROOT=os.path.join(BASE_DIR,"static/upfile")
  • views.py部分
from django.shortcuts import render,HttpResponse

# Create your views here.

def upfile(request):
return render(request,'upfile.html')

import os
from django.conf import settings

def savefile(request):
if request.method == 'POST':
f = request.FILES['file'] # input 框name 屬性
# 檔案在伺服器客戶端的路徑
filePath = os.path.join(settings.MEDIA_ROOT,f.name)
with open(filePath,'wb') as fp:
for info in f.chunks():
fp.write(info)
return HttpResponse('上傳成功')
else:
return HttpResponse('上傳失敗')
  • 網頁部分

  • {% csrf_token %}作用

    • django 第一次響應來自某個客戶端的請求時,會在伺服器端隨機生成一個 token,把這個 token 放在 cookie 裡。然後每次 POST 請求都會帶上這個 token,如果註釋會報錯“CSRF驗證失敗. 請求被中斷.”
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定義上傳檔案</title>
</head>
<body>
{# method=post 新增屬性 enctype="multipart/form-data" #}
<form method="post" action="/savefile/" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file" /> <br>
<input type="submit" value="上傳">

</form>

</body>
</html>

在admin中上傳,Django框架會自動驗證是不是圖片格式。自定義的上傳需要自己驗證上傳的檔案格式是不是圖片,驗證圖片格式會後續補充,路由部分請自行補充