- Django 3.0入門與實踐
- 李健編著
- 602字
- 2021-03-27 00:17:37
3.12 HTML表單
HTML表單是客戶端與服務器端進行交互的重要方式,在講解HTML表單之前先進行必要的準備工作。
步驟1:將Choice模型注冊到admin網站,修改polls/admin.py。
from django.contrib import admin from .models import Question, Choice
admin.site.register(Question) admin.site.register(Choice)
步驟2:登錄admin后臺,為問卷添加選項。
單擊Add按鈕,進入添加問卷選項頁面,效果如下圖所示。

添加3個選項,效果如下面三幅圖所示。


完成準備工作后,繼續修改polls/detail.html模板,為其添加HTML表單用于提交信息,新模板如下:

代碼分析:
在問卷詳情頁顯示問卷相關選項,并為每一個選項添加單選按鈕(radio)。
表單的處理頁用url模板標簽表示"{% url 'polls:vote' question.id %}",表單以post的方式提交。
forloop.counter標簽用于記錄循環次數。
由于當前表單使用post方式提交數據,需要防止偽造的跨站點請求,表單中的{% csrf_token %}標簽就可以解決這類問題。
接下來創建一個視圖來接收并處理表單提交的信息:

代碼分析:
request.POST是一個類字典對象,以便通過關鍵字的名字獲取提交的數據。如果表單提交的信息中不存在則拋出KeyError。
信息處理結束后,使用HttpResponseRedirect方法跳轉到新的頁面以免用戶單擊瀏覽器后退按鈕導致重新提交表單,這是一個很好的編程習慣。
為了防止在HttpResponseRedirect方法中使用URL硬編碼,使用reverse()方法強制調用URL名字并且接收必要參數,而不是直接使用URL。
由于提交問卷后頁面會跳轉到結果頁,因此需要修改results視圖:

新建polls/results.html模板并添加以下代碼:

好了,到目前為止一個簡單的投票系統就做好了,登錄網站測試一下。
打開投票系統網址:http://127.0.0.1:8000/polls/,效果如下圖所示。

單擊問卷鏈接,效果如下圖所示。

選擇任意選項,單擊“提交”按鈕,效果如下圖所示。

- Python程序設計教程(第2版)
- ASP.NET MVC4框架揭秘
- 構建移動網站與APP:HTML 5移動開發入門與實戰(跨平臺移動開發叢書)
- JMeter 性能測試實戰(第2版)
- Hands-On RESTful Web Services with Go
- 程序設計基礎教程:C語言
- OpenGL Data Visualization Cookbook
- Node Cookbook(Second Edition)
- 搞定J2EE:Struts+Spring+Hibernate整合詳解與典型案例
- Secret Recipes of the Python Ninja
- Qt 4開發實踐
- Modular Programming with JavaScript
- JavaScript語法簡明手冊
- 測試工程師Python開發實戰
- JavaScript高級程序設計(第4版)