【Python-Django聖堂法術】初探表單 -魏泯

今天使用了Python的WEB框架Django進行學習,圍繞學習“表單”做了一些程序,於是就有了這份實驗報告:
期間我遇到了一些問題,例如:MultiValueDictKeyError at /add/ “‘a’” 這樣的錯誤,並最終弄懂了它是如何運行並解決這個問題。
 
我是從"自強學堂"上找了一些小案例——加減乘除,跟着源碼一步一步寫然後完成了效果。於是自己重新創建了一個項目開始練習我學習到的知識:
通過request.GET這樣的方法獲取我前端頁面上提交過來的"a"&"b"兩個值
(通過form表單,get提交方式)

[views.py]:  #這是它的設計思想
 a = int(request.GET['a'])   #我把他們變成int類型
 b = int(request.GET['b'])
 return HttpResponse(str(a+b))  #這個HttpResponse大家都會用,只接受str參數

HttpResponse是直接將字符串渲染到當前頁面,會蓋住頁面原有的內容。

其實總的來看這非常簡單:但是這只是一個開始——在實驗步驟上我不太想貼太多代碼,免得大家看的繁複,我只提供設計思想。所以接下來我還是得有必要補充一下前端的內容。
我只寫了一個前端頁面,用於提交表單到後臺,但是它的提交地址指向了另一個URL:^add$,所以我寫了第二個視圖函數——許多關鍵問題就出現在這裏!

[views.py]:
	def add(request):
		if request.method == 'GET':
			a = int(request.GET['a']) 
			b = int(request.GET['b'])
			return HrrpResponse(str(a+b))
		return HttpResponse("Here not a world.")

這並沒有什麼特別的,只是多了一個步驟:if request.method == 'GET’罷了。
我在想,我通過提交表單的值,跳轉到相應URL,執行相關參數的時候,他可以正常顯示。那我如果直接輸入他的URL——而不傳遞任何的值呢?

[url:127.0.0.1/add/]:
MultiValueDictKeyError at /add/

"'a'"

Request Method: 	GET
Request URL: 	http://127.0.0.1:8000/add/
...調試界面的錯誤云云

無非就是系統找不到a = request.GET['a‘] 這一步的值"a"而已,所以無法順序執行。
你猜怎麼着?我寫了個異常處理。

[views.py]:
if request.method == 'GET':
        try:
            a = int(request.GET['a'])
            b = int(request.GET['b'])
            return HttpResponse(str(a+b))
        except:
            return HttpResponse('沒有值')
return HttpResponse('Here not a world.')

頁面上赤裸裸地掛着三個字:沒有值。說明了什麼?

通過這些嘗試我發現我真正進一步領會了頁面常用的 “POST"與"GET” 兩種請求方法:那就是隻要你點開一個頁面(可以說是輸入一個URL並且按下回車),他默認的請求方法就是GET,不論你是否提交數據。對於它來說,只要你不指定其他的提交方法,if request == ‘GET’ 就始終等於True.
而這就是爲什麼其實很簡單的一個東西我卻想了半天,因爲if request == 'POST’不總是等於True這樣的思想影響到了我,使我覺得,只要我不寫(提交方法)他就不會執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章