對(duì)detail.html 頁面進(jìn)行值的傳遞
- 首先創(chuàng)建一個(gè)*<form action="{% url 'blog:vote' question.id }" method='post'> *標(biāo)簽,用來把得到表單數(shù)據(jù)post給server后端服務(wù).其中的url 'blog:vote' 代表urls.py中相應(yīng)的url. 對(duì)應(yīng)的可以映射到views中相應(yīng)的方法
- 使用radio屬性的input 構(gòu)造一個(gè)多選選擇框, 其中的forloop.counter方法為返回當(dāng)前循環(huán)的次數(shù)(相當(dāng)于一個(gè)計(jì)時(shí)器).
forloop.counter
indicates how many times the for tag has gone through its loop
-
{% csrf_token %} 這個(gè)方法加在頁面里.主要是用來防止跨站
Since we’re creating a POST form (which can have the effect of modifying data), we need to worry about Cross Site Request Forgeries. Thankfully, you don’t have to worry too hard, because Django comes with a very easy-to-use system for protecting against it. In short, all POST forms that are targeted at internal URLs should use the {% csrf_token %}
在views.py中編寫vote方法,構(gòu)造投票邏輯
- 利用request把POST表單中的choice的值返回.利用question對(duì)象,通過外鍵查找到相應(yīng)的choice對(duì)象.
獲取到selected_choice 對(duì)象后對(duì)choice的votes字段的值進(jìn)行+1操作分尸。表示進(jìn)行了投票卫玖。使用save()
保存到數(shù)據(jù)庫的choice表中
1.request.POST 是一個(gè)頁面?zhèn)鬟f表單參數(shù)的方法.相當(dāng)于一個(gè)字典,對(duì)key進(jìn)行values的獲取.values始終是strings
django還提供了request.GET方法用于獲取傳遞的參數(shù)
2.HttpResponseRedirect()方法:用于進(jìn)行重定向.
其中有reverse()這個(gè)方法.這個(gè)方法避免了對(duì)url的拼接構(gòu)造.直接在參數(shù)中放入templates中的頁面地址跟相應(yīng)跳轉(zhuǎn)的args即可.
在views.py中編寫result方法.對(duì)投票后的結(jié)果進(jìn)行顯示.較為簡(jiǎn)單,進(jìn)行question的傳遞即可
編寫result的html頁面
- 對(duì)數(shù)據(jù)庫傳遞過來的值進(jìn)行展示
其實(shí)現(xiàn)在這個(gè)版本的 投票系統(tǒng)有問題.當(dāng)多人訪問時(shí).會(huì)產(chǎn)生競(jìng)爭(zhēng)條件問題(race condition). - 另外,pluralize這個(gè)東西好像是管道命令(過濾器?).http://blog.csdn.net/foryouslgme/article/details/52057445 有詳細(xì)介紹
使用形式:{{value | pluralize}}呻澜,或者{{value | pluralize:”es”}},或者{{value | pluralize:”y,ies”}}
意義:如果value不是1瞻坝,則返回一個(gè)復(fù)數(shù)后綴暮蹂,缺省的后綴是’s’