Django中request.GET与request.POST的区别及用法详解

Luna
Luna
发布时间:2026-10-13| 6人浏览过
原创

本文详细解析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的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。