Python 上傳圖片
目前網路有關 django 圖片上傳的教學,清一色都是使用 ModelForm。也就是使 ModelForm製作上傳表單,然後寫入伺服器的 SQLite資料庫,再儲存到伺服器的硬碟。而且大家抄來抄去的,實在很傷眼。
本篇並不用ModelForm,而是直接自已製作Form,自已接收圖片,而且不使用SQLite儲存資料。
前端
前端是使用者要上傳圖片的介面,請在 templates目錄下新增 upload.html,設計一個 form 表單,代碼如下。
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">{% csrf_token %}
<input type="text" name="userAccount">
<input type="password" name="userPassword">
<input type="file" name="userFile">
<input type="submit" value="提交">
</form>
</body>
</html>
Django 預設會啟動跨站請求攻擊保護(Cross-Site Request Forgery),所以在表單的後面,要加入 {% csrf token %} 才可以正確傳送資料。
跨站攻擊這部份日後再說明,可先參考如下某網大所寫的文章 https://openhome.cc/Gossip/CodeData/PythonTutorial/FormCSRF.html。
接下來,於DOS下進入專案目錄,新增 upload app,如入指令
..\venv\Scripts\python.exe manager.py startapp upload
上述指令會在虛擬網站下產生 upload 目錄,再於此目錄下的 views.py 編寫如下代碼
from django.shortcuts import render
def html(request):
return render(request, 'upload.html',None)
安裝upload app,請修改 settings.py 如下
INSTALLED_APPS = [
'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'upload',
]
修改 urls.py 設定連結網址
import upload.views as upload
urlpatterns = [
path('admin/', admin.site.urls),
path('upload/', upload.html),
]
最後在DOS下啟動虛擬網站,網址輸入 http://localhost:7000/upload 即可看到上傳圖片的網頁
python manager.py runserver 0.0.0.0:7000

後端
上述 upload.html,表單裏的action還是 /upload,表示按下送出圖片時,還是由 upload/ 來處理。這時就需使用 if request.method ==’POST’來判斷是第一次進入網頁,還是第二次已夾帶圖片送出。
