【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这样的思想影响到了我,使我觉得,只要我不写(提交方法)他就不会执行。

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