接續昨天的內容,我們今天要來實做表單送出並新增資料到資料表的功能。
先來複習我們昨天表單的原始碼 :
| 1 | <h1>Add member</h1> | 
在我們提交表單後,資料會被POST到member/add/addrecord/這個路徑,然後準備做下一步的處理,而要如何處理收到的資料,依靠的還是URLs和Views的配合。
我們接下來需要先在members的views.py新增收到對路徑member/add/addrecord/請求的處理方法,然後在urls.py裡,新增相應的路徑用來正確指向、設定處理路徑請求的view方法和給定路徑別名。
修改 Views
在members/views.py裡面新增addrecord方法用來處理表單送出後產生的請求並把收到的資料新增到資料表上。
| 1 | from django.http import HttpResponse, HttpResponseRedirect #1 | 
- 
HttpResponseRedirect是HttpResponse的subclass,用來做路徑的重新導向
- 
reverse的功能是允許使用前面說過的path別名,來找到對應的路徑和相應的view方法
- 
我們的表單是以 POST的方式,將資料含在HttpRequest裡寄出,那我們當然要去找HttpRequest物件(request)的POST屬性拿資料。從POST這個屬性拿到的資料,它本身會是個QueryDict,也就是Python裡為人熟知的Key-Value結構。因此我們會用POST['first']的形式去拿到表單name=first的資料值。
- 
同上,我們用 POST['last']的形式去拿到表單name=last的資料值。
- 
把剛拿到的資料值用來建立 Members物件即要新增到資料表的新紀錄(Record)並以變數member承接
- 
實際將這筆新的紀錄( Record)存放到資料表上
- 
HttpResponseRedirect用來重新導引路徑,而後面的reverse('index'),則可以把它想成path('', views.index, name='index'),也就是新增完資料後跳轉回members/
修改完Views接著修改URLs,讓Django能正確處理對members/add/addrecord的請求。
修改 URLs
在members/urls.py的urlpatterns裡面,新增到add/addrecord的路徑、指定處理請求的view方法和設定路徑別名。
| 1 | from django.urls import path | 
- 設定到members/add/addrecord的路徑,以members/views.py的addrecord處理請求並給定路徑別名addrecord
修改完URLs後,表單便可找到處理資料的路徑,接下來看看成果吧!
啟動 Server 檢視成果
- 
打開 CMD並切換到虛擬環境(python venv)的資料夾路徑下(實際 venv路徑不一定會跟我一樣喔!) 
- 
輸入以下指令啟動虛擬環境 1 Scripts\activate.bat  啟動虛擬環境後結果如下:  
- 
接著切換路徑到Django Project所在的資料夾下  
- 
接著輸入以下指令 Start Server1 py manage.py runserver  
- 
在瀏覽器輸入對應的網址( 127.0.0.1:8000/members/),接著點擊下方連結進入表單頁面 
- 
接著輸入表單資料並送出  
- 
最後,跳轉回到 127.0.0.1:8000/members/就可以看到剛剛新增的資料 
這樣就學會如何在網頁上新增資料表紀錄(Record)囉! 明天會是對 CSRF Token 做簡略補充的番外篇。
補充資料
Django Documentation - Request and response objects
Django Documentation - django.urls.reverse