接續昨天的內容,今天要來實作送出表單(Submit
)去更新資料表資料的功能,不過在此之前,先讓我們回顧一下昨天表單的原始碼。
<h1>Update member</h1>
<form action="updaterecord/{{ mymember.id }}" method="post">
{% csrf_token %}
First Name:<br>
<input name="first" value="{{ mymember.firstname }}">
<br><br>
Last Name:<br>
<input name="last" value="{{ mymember.lastname }}">
<br><br>
<input type="submit" value="Submit">
</form>
從上面的原始碼可以看到,當按下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 }}
在members/views.py
新增1個方法updaterecord
,用來處理更新資料表資料的請求 :
#上面的東西都沒變所以省略...
#本次新增的內容
def updaterecord(request, id): #1
first = request.POST['first'] #2
last = request.POST['last'] #3
member = Members.objects.get(id=id) #4
member.firstname = first #5
member.lastname = last #6
member.save() #7
return HttpResponseRedirect(reverse('index')) #8
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
將頁面重新導向指定路徑(即最初的資料表格頁面)。按下提交更新資料表單的同時,會對members/update/updaterecord/{{ mymember.id }}
這個位址發出請求,所以我們需要在members/urls.py
的urlpatterns
新增1個path
,讓該路徑變成可以訪問的狀態。
把members/urls.py
改成下方這樣 :
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('add/', views.add, name='add'),
path('add/addrecord/', views.addrecord, name='addrecord'),
path('delete/<int:id>', views.delete, name='delete'),
path('update/<int:id>', views.update, name='update'),
path('update/updaterecord/<int:id>', views.updaterecord, name='updaterecord'), #1
]
id
值來正確更新資料表上的資料,所以這邊也是用帶有參數的path
格式。後方負責處理請求的updaterecord
方法(view
)會以updaterecord(request,id)
的形式被呼叫。到這邊為止,在網頁更新資料庫資料表紀錄的功能就完全實作完畢了,接著來看成果吧!
打開CMD
並切換到虛擬環境(python venv
)的資料夾路徑下
(實際venv
路徑不一定會跟我一樣喔!)
輸入以下指令啟動虛擬環境
Scripts\activate.bat
啟動虛擬環境後結果如下:
接著切換路徑到Django Project
所在的資料夾下
接著輸入以下指令Start Server
py manage.py runserver
在瀏覽器輸入對應的網址(127.0.0.1:8000/members/
),接著點擊任意資料紀錄的update
進入更新資料表單
將輸入框內容改成要更新的欄位值
更改完畢並確認後,點擊Submit
送出資料後會跳轉回資料表格頁,於頁面中即可看到資料已更新
我們目前已經學會實作在網頁上新增、刪除、更新資料表資料的功能。而在接下來的蠻長一段時間,都會是對
Django Template Tags
的補充內容。