Django中request.GET与request.POST的区别及用法详解
本文详细解析Django框架中request.GET与request.POST的区别。GET用于查询资源,参数附于URL;POST用于更新资源,数据置于HTTP包体。文章深入讲解两者的QueryDict对象属性、键值对处理机制,并通过完整代码示例演示如何接收单值、多值及表单数据,帮助开发者掌握HTTP交互的核心差异。
Django中request.GET与request.POST的区别
Django中request.GET和request.POST的区别
POST和GET差异:
POST和GET是HTTP协议中定义的与服务器交互的两种主要方法。通常情况下,GET用于获取或查询资源信息,而POST用于更新或提交资源信息。此外,HTTP协议还定义了PUT和DELETE等其他方法。
尽管侧重点不同,POST和GET都可以用于与服务器完成查询、修改、增加和删除操作。
使用GET提交时,请求的数据会附加在URL之后,通过问号(?)分隔URL和传输数据,多个参数之间使用&符号连接。
使用POST提交时,提交的数据被放置在HTTP请求包的包体中。因此,GET提交的数据会显示在浏览器的地址栏中,而POST提交时地址栏保持不变。
GET请求属性与处理示例
GET属性
1、request.GET是一个QueryDict类型的对象。
2、该对象包含所有通过GET请求方式传递的参数。
3、它对应URL请求地址中的参数部分,位于问号(?)之后。
4、参数的格式为键值对,例如key1=value1。
5、多个参数之间使用&符号连接,例如key1=value1&key2=value2。
6、键(Key)由开发人员定义,而值(Value)是可变的。
示例如下
创建视图getTest1用于定义链接页面,getTest2用于接收单键单值参数,getTest3用于接收单键多值参数。
def getTest1(request):
return render(request,'booktest/getTest1.html')
def getTest2(request):
return render(request,'booktest/getTest2.html')
def getTest3(request):
return render(request,'booktest/getTest3.html')
**配置url
url(r'^getTest1/$', views.getTest1),
url(r'^getTest2/$', views.getTest2),
url(r'^getTest3/$', views.getTest3),
**创建getTest1.html,定义链接
<html>
<head>
<title>Title</title>
</head>
<body>
链接1:一个键传递一个值
<a href="/getTest2/?a=1&b=2" rel="external nofollow" >gettest2</a><br>
链接2:一个键传递多个值
<a href="/getTest3/?a=1&a=2&b=3" rel="external nofollow" >gettest3</a>
</body>
</html>
**完善视图getTest2的代码
def getTest2(request):
a=request.GET['a']
b=request.GET['b']
context={'a':a,'b':b}
return render(request,'booktest/getTest2.html',context)
**创建getTest2.html,显示接收结果
<html>
<head>
<title>Title</title>
</head>
<body>
a:{{ a }}<br>
b:{{ b }}
</body>
</html>
**完善视图getTest3的代码
def getTest3(request):
a=request.GET.getlist('a')
b=request.GET['b']
context={'a':a,'b':b}
return render(request,'booktest/getTest3.html',context)
**创建getTest3.html,显示接收结果
<html>
<head>
<title>Title</title>
</head>
<body>
a:{% for item in a %}
{{ item }}
{% endfor %}
<br>
b:{{ b }}
</body>
</html>
POST请求属性与处理示例
POST属性
1、request.POST是一个QueryDict类型的对象。
2、该对象包含所有通过POST请求方式传递的参数。
3、它与HTML表单(form)中的控件相对应。
4、问:表单中哪些控件会被提交?
答:只有具备name属性的控件才会被提交,其中name属性的值为键,value属性的值为值,构成键值对进行提交。
对于checkbox(复选框)控件,若name属性相同则视为一组。当控件被选中后会被提交,这存在一键多值的情况。键由开发人员定义,值是可变的。
示例如下
定义视图postTest1
def postTest1(request):
return render(request,'booktest/postTest1.html')
**配置url
url(r'^postTest1$',views.postTest1)
**创建模板postTest1.html
<html>
<head>
<title>Title</title>
</head>
<body>
<form method="post" action="/postTest2/">
姓名:<input type="text" name="uname"/><br>
密码:<input type="password" name="upwd"/><br>
性别:<input type="radio" name="ugender" value="1"/>男
<input type="radio" name="ugender" value="0"/>女<br>
爱好:<input type="checkbox" name="uhobby" value="吃"/>吃
<input type="checkbox" name="uhobby" value="笑"/>笑
<input type="checkbox" name="uhobby" value="酒"/>酒
<input type="checkbox" name="uhobby" value="爬山"/>爬山<br>
<input type="submit" value="提交"/>
</form>
</body>
</html>
**创建视图postTest2接收请求的数据
def postTest2(request):
uname=request.POST['uname']
upwd=request.POST['upwd']
ugender=request.POST['ugender']
uhobby=request.POST.getlist('uhobby')
context={'uname':uname,'upwd':upwd,'ugender':ugender,'uhobby':uhobby}
return render(request,'booktest/postTest2.html',context)
**配置url
url(r'^postTest2$',views.postTest2)
**创建模板postTest2.html
<html>
<head>
<title>Title</title>
</head>
<body>
{{ uname }}<br>
{{ upwd }}<br>
{{ ugender }}<br>
{{ uhobby }}
</body>
</html>
以上这篇对Django中request.GET和request.POST的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













