Django 上傳檔案code整理

by Kelly Guo
366 views
black and gray laptop displaying codes

筆記內容:django user前台上傳圖檔設定

  • model中設定ImageField

featured_image = models.ImageField(null=True,blank=True, default="userimages/default.jpg")

  • 更新與啟動,python manage.py makemigrations -> python manage.py  migrate
如果有出現警告pillow需要被下載,就在terminal呼叫pip下載pillow (跟上傳檔案文檔有關的程式)

這時候的admin後台應該已經有了,但是前台還沒有,前台需要去form.py設定。

  • 因為上傳檔案要跟django說你檔案要放在哪裡,所以去settings設定

MEDIA_URL='/userimages/' —>前台要去撈圖片時需要有url

MEDIA_ROOT= os.path.join(BASE_DIR , 'static/userimages')   —>上傳的檔案就會存在這裡,可以自己命名資料夾

form.py的fields要加入image的model name
(設定完前台就看得到上傳檔案了)

  • 但是前台還沒辦法知道如要load圖檔要去哪裡找,網址比需要對應到圖片網址,因此要在url import以下
from django.conf import settings

from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

—>這串不太懂意思,應該是說要幫圖檔創造url要在url+=後面網址的邏輯

  • 最後前台上傳的檔案也需要被設定,在執行POST有存到指定的資料夾,才能被save

需加入request.FILES,create跟update都會需要用到(會更新到圖檔的功能),所以都要設定

def createProject(request):
form = ProjectForm()

if request.method == "POST":

form = ProjectForm(request.POST, request.FILES)
      if form.is_valid():
          form.save()
          return redirect('projects')

  •     設定form上傳時發到伺服器

enctype="multipart/form-data"

Enctype

Enctype :指定將資料回發到伺服器時瀏覽器使用的編碼型別。用於表單裡有圖片上傳。 

編碼型別有以下三種: 

application/x-www-form-urlencoded: 在傳送前編碼所有字元(預設)。這是標準的編碼格式。 

multipart/form-data: 不對字元編碼,在使用包含檔案上傳控制元件的表單時,必須使用該值。 

text/plain: 窗體資料以純文字形式進行編碼,其中不含任何控制元件或格式字元。空格轉換為 ” ” 加號,但不對特殊字元編碼。

表單中enctype=”multipart/form-data”的意思,是設定表 單的MIME編碼。預設情況,這個編碼格式是 application/x-www-form-urlencoded,不能用於檔案上傳;只有使用了multipart/form-data,才能完整 的傳遞檔案資料。 

enctype=”multipart/form-data”是上傳二進位制資料過去。 

如果在伺服器端要通過Request物件來獲取相應表單域的值,則應該將enctype屬性設定為application/x-www-form-urlencoded值(即預設值,可以不顯示設定)。 

參考:https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/544448/ 

0 留言

你可能也會喜歡...

留下你的想法