接續昨天的內容,今天要來實作送出表單(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 Server
1
py manage.py runserver
-
在瀏覽器輸入對應的網址(
127.0.0.1:8000/members/
),接著點擊任意資料紀錄的update
進入更新資料表單 -
將輸入框內容改成要更新的欄位值
-
更改完畢並確認後,點擊
Submit
送出資料後會跳轉回資料表格頁,於頁面中即可看到資料已更新
我們目前已經學會實作在網頁上新增、刪除、更新資料表資料的功能。而在接下來的蠻長一段時間,都會是對
Django Template Tags
的補充內容。