接續昨天的內容,今天要來實作送出表單(Submit)去更新資料表資料的功能,不過在此之前,先讓我們回顧一下昨天表單的原始碼。
1 | <h1>Update member</h1> |
從上面的原始碼可以看到,當按下Submit按鈕後,資料會被傳到action屬性設定的updaterecord/{{ mymember.id }}這個位址進行處理,且資料的傳遞方法採用post的方式。
然後我們可以依據表單的原始碼,做出以下判斷並逐步實作 :
- 需要在
members/views.py撰寫名為updaterecord的方法,且方法是帶有request、id這2個參數的版本。 - 需要在
members/urls.py新增到updaterecord/{{ mymember.id }}的path,且這個path要使用帶有參數的特殊格式。
實際上點擊
Submit後,資料傳送目的地的完整位址是members/update/updaterecord/{{ mymember.id }}
修改 Views
在members/views.py新增1個方法updaterecord,用來處理更新資料表資料的請求 :
1 | #上面的東西都沒變所以省略... |
- 因為
path本身帶有參數的關係,所以在urls.py裡面,updaterecord方法實際會以updaterecord(request,id)的形式被呼叫。 - 我們可以從送出表單所產生的
HttpRequest(即request)物件的POST屬性取得資料值,至於POST它是Key-Value的形式,這也是為什麼這邊要用request.POST['first']的形式去取得表單上name=first那欄的資料。 - 同上,取得表單上
name=last那欄的資料 - 以獨一無二的
id值將要更新的資料表資料(Record)抓出來。 - 使用類似物件導向的方式指定資料的
firstname欄位要更新的值(即first)。 - 使用類似物件導向的方式指定資料的
lastname欄位要更新的值(即last)。 - 將這次對資料(
Record)的修改存到資料表,也就是更新資料表資料。 - 透過
reverse('index')找到別名為index的path,再藉著HttpResponseRedirect將頁面重新導向指定路徑(即最初的資料表格頁面)。
修改 URLs
按下提交更新資料表單的同時,會對members/update/updaterecord/{{ mymember.id }}這個位址發出請求,所以我們需要在members/urls.py的urlpatterns新增1個path,讓該路徑變成可以訪問的狀態。
把members/urls.py改成下方這樣 :
1 | from django.urls import path |
- 因為需要靠
id值來正確更新資料表上的資料,所以這邊也是用帶有參數的path格式。後方負責處理請求的updaterecord方法(view)會以updaterecord(request,id)的形式被呼叫。
到這邊為止,在網頁更新資料庫資料表紀錄的功能就完全實作完畢了,接著來看成果吧!
啟動 Server 檢視成果
-
打開
CMD並切換到虛擬環境(python venv)的資料夾路徑下(實際
venv路徑不一定會跟我一樣喔!)
-
輸入以下指令啟動虛擬環境
1
Scripts\activate.bat

啟動虛擬環境後結果如下:

-
接著切換路徑到
Django Project所在的資料夾下
-
接著輸入以下指令
Start Server1
py manage.py runserver

-
在瀏覽器輸入對應的網址(
127.0.0.1:8000/members/),接著點擊任意資料紀錄的update進入更新資料表單

-
將輸入框內容改成要更新的欄位值

-
更改完畢並確認後,點擊
Submit送出資料後會跳轉回資料表格頁,於頁面中即可看到資料已更新
我們目前已經學會實作在網頁上新增、刪除、更新資料表資料的功能。而在接下來的蠻長一段時間,都會是對
Django Template Tags的補充內容。