官术网_书友最值得收藏!

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/,效果如下圖所示。

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

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

主站蜘蛛池模板: 平潭县| 沂南县| 驻马店市| 南康市| 岗巴县| 墨竹工卡县| 雅安市| 新河县| 营山县| 和田市| 北京市| 金湖县| 遂川县| 泉州市| 临安市| 上栗县| 梅河口市| 柳江县| 南郑县| 白沙| 舞钢市| 合水县| 天峻县| 合川市| 黔西县| 北碚区| 海盐县| 普陀区| 伊宁县| 峡江县| 庆阳市| 通河县| 宿迁市| 太白县| 滨海县| 绍兴县| 宣恩县| 扎兰屯市| 平凉市| 松阳县| 霍邱县|