Python 上傳圖片

      在〈Python 上傳圖片〉中尚無留言

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’來判斷是第一次進入網頁,還是第二次已夾帶圖片送出。

🔒 底下內容僅限會員閱讀。

立即登入

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *