一、写这篇博客的目的
记录表单提交方式get请求结合几个常见场景实例如何使用,以后即使我太久没用导致不会这个get请求的用法,也能通过查看这篇博客进行快速复习;
涉及表单提交方式的使用:从一个html页面通过任意一个表单提交方式把数据提交到服务端,服务端接收数据后判断提交的数据,然后做出对应的响应再返回给指定的html页面(这么一整个流程就是表单相关的知识点,会涉及到数据的交互);
相关三个场景实例分别是:
- 场景实例一:获取前端请求后,对请求数据不做处理,都会统一返回一个特定的结果;
- 场景实例二:获取前端请求后,对请求数据做处理(请求数据不涉及跟数据表数据的对比校验),对不同的处理结果都会返回对应特定的结果;
- 场景实例三:获取前端请求后,对请求数据做处理(请求数据涉及跟数据表数据的对比校验),对不同的处理结果都会返回对应特定的结果;
我们只需要知道这三个场景实例分别怎么使用即可,不用去学其他的场景实例;
表单提交方法有四种:post、get、delete、put,但主流99%常用的是post和get,尤其post比get更常用,比如某个电商公司的ecrp开放平台有360个接口且这360个接口的表单提交方式都是post,所以delete和put我们不需要去深入学习只需要有这个概念即可;
每个场景实际的具体实现可以分别看接下来的完整操作流程;
二、三个场景实际的完整操作流程
1、【场景实例一:获取前端请求后,对请求数据不做处理,都会统一返回一个特定的结果;】的完整操作流程
1.1、第一步:在项目【helloworld/hello/templates】里新增一个【qq_test.html】
细节:
①. 表单在html文件里由【<form>】标签实现。一个完整的表单包含四个部分:提交地址、请求方式、元素控件、提交按钮。四个部分的作用分别如下:
- 属性action 提交地址(设置用户提交的数据由哪个url接收和处理)
- 属性method 请求方式(主流常用的请求方式有get和post)
- 标签input 元素控件(输入文本信息)
- 属性submit 提交按钮(触发提交动作/触发对接收请求的url的访问)
②.在html文件里,每个标签比如【<form>】可以理解为是一个类;每个标签里的属性比如【标签<form>里的属性action】可以理解为是一个方法(python语言中,有类和方法的概念);
③.在html文件里,点击某个标签比如【<form>】,或者点击某个属性比如【action】,都能跳转到源码所在页面(html本身也是一门计算机语言,我们只需要怎么用就行,初级阶段不需要去了解源码);
④.属性action的值的相关知识点:
- 如果值为空字符串,表示:请求数据是提交给当前html页面;
- 如果值为一个包含url匹配规则里的参数name对应的参数值的值,比如值为【"{% url 'urlName_of_qq_result' %}"】,表示:请求数据是提交给这个参数name对应的参数值为【urlName_of_qq_result】的url匹配规则;
相关代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试你的QQ号</title>
</head>
<body>
<p>请输入你的QQ号</p>
<form action="{% url 'urlName_of_qq_result' %}" method="get">
qq: <input type="text" name="q"> <br>
<br>
<input type="submit" value="提交">
</form>
</body>
</html>
1.2、第二步:在项目【helloworld/hello/views.py】里新增两个视图函数
def qq_test1(request):
return render(request,'qq_test.html')
def qq_result1(request):
return HttpResponse("这个qq的数据提交成功了!")
1.3、第三步:在项目【helloworld/helloworld/urls.py】里新增两个url匹配规则
url(r"^qq_test001/$",views.qq_test1),
url(r"^qq_result001/$",views.qq_result1,name="urlName_of_qq_result"),
1.4、第四步:重启服务
1.5、第五步:任一浏览器上访问url【http://127.0.0.1:8000/qq_test001/】
1.6、第六步:在url【http://127.0.0.1:8000/qq_test001/】对应的页面里的提交字段【qq】里输入任一qq号并点击提交按钮
2、【场景实例二:获取前端请求后,对请求数据做处理(请求数据不涉及跟数据表数据的对比校验),对不同的处理结果都会返回对应特定的结果;】的完整操作流程
2.1、第一步:在项目【helloworld/hello/views.py】里修改视图函数【qq_result1】
细节:
①.【request.GET】可以看成一个字典,用GET方法传递的值都会保存到其中,可以用 request.GET['key_name']来取值。但是当key值不存在时,会报这个错误:“MultiValueDictKeyError”;
②.为了避免key值不存在时报错,我们可以用另外一种写法:request.GET.get("q",None);
③.request.GET['key_name']里的‘key_name’:指的是html页面里的form标签里的每个input标签里的name属性的属性名;
④.key值:指的是html页面里的form标签里的每个input标签里的name属性的值;
def qq_result1(request):
# return HttpResponse("这个qq的数据提交成功了!")
if request.method == 'GET':
# 获取前端页面提交的数据
qq_value = request.GET.get("q",None) # 这个写法比较稳
# qq_value = request.GET["q"] # 这个写法也可以
result = ""
try:
if int(qq_value)%2 ==0:
res = "这个qq号是偶数"
else:
res = "这个qq号是奇数"
except:
res = "请输入正确的qq号"
return HttpResponse("测试结果:%s"%res)
2.2、第二步:重启服务
2.3、第三步:任一浏览器上访问url【http://0.0.0.0:8000/qq_test001/】
2.4、第四步:在url【http://0.0.0.0:8000/qq_test001/】对应的页面里的提交字段【qq】里输入任一qq号并点击提交按钮
3、【场景实例三:获取前端请求后,对请求数据做处理(请求数据涉及跟数据表数据的对比校验),对不同的处理结果都会返回对应特定的结果;】的完整操作流程
3.1第一步:在项目【helloworld/hello/templates/animal】里新增一个【animal_search_html.html】
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>查询符合年龄的所有动物的动物名</title>
</head>
<body>
<form action="" method="get">
输入动物的年龄: <input type="text" name="age_of_animal"> <br>
<br>
<input type="submit" value="提交">
</form>
<p>符合年龄的所有动物的动物名:{
{result}} </p>
</body>
</html>
3.2、第二步:在项目【helloworld/hello/animalViews.py】里新增一个视图函数
#!/usr/bin/python
# -*- coding:utf-8 -*-
"""""""""""""""""""""""""""""""""
@file: animalViews.py
@author: lucas
@createTime: 2021/3/9 4:56 下午
@Function: 存储数据表animal的所有视图操作
"""""""""""""""""""""""""""""""""
from django.shortcuts import render
from hello.models import Animal
def animal_search(request):
result_of_return = ""
if request.method == 'GET':
# 获取提交的数据
try:
age = request.GET.get("age_of_annimal", None)
res = Animal.objects.filter(age=age).values()
if len(res) == 0:
# result_of_return = "" # 可用这行代码替代
pass
else:
for i in res:
result_of_return = result_of_return + i["name"] + ';'
except:
result_of_return = "查询的值只能为自然数"
print(result_of_return)
return render(request, 'annimal/animal_search.html', {"result": result_of_return})
3.3、第三步:在项目【helloworld/helloworld/urls.py】里新增一个url匹配规则
#这部分是针对数据表animal的所有url匹配规则的汇总=====================================================
url(r"^animal_search_001/$",animalViews.animal_search),
#这部分是针对数据表animal的所有url匹配规则的汇总=====================================================
3.4、第四步:重启服务
3.5、第五步:任一浏览器上访问url【http://127.0.0.1:8000/animal_search_001/】
3.6、第六步:在url【http://127.0.0.1:8000/animal_search_001/】对应的页面里的提交字段【输入动物的年龄】里输入任一自然数值并点击提交按钮