对Django 中request.get和request.post的区别详解

Django 中request.get和request.post的区别

POST和GET差异:

POST和GET是HTTP协议定义的与服务器交互的方法。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。另外,还有PUT和DELETE方法。

POST和GET都可以与服务器完成查,改,增,删操作。

GET提交,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接;

POST提交,把提交的数据放置在HTTP包的包体中;因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。

GET属性

1、QueryDict类型的对象

2、包含get请求方式的所有参数

3、与url请求地址中的参数对应,位于?后面

4、参数的格式是键值对,如key1=value1

5、多个参数之间,使用&连接,如key1=value1&key2=value2

6、键是开发人员定下来的,值是可变的

示例如下

创建视图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属性

1、QueryDict类型的对象

2、包含post请求方式的所有参数

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

(0)

相关推荐

  • django 使用 request 获取浏览器发送的参数示例代码

    获取数据(四种方式) 1. url: 需要正则去匹配 url(r'^index/(num)/$',view.index) 匹配到的参数会自动传入对应的视图函数 也可以给匹配到的参数起名字?P<num>     url(r'^index/(?P<num1>\d*)(?P<num2>\w*)$',) 使用url传参的时候,要么都使用位置参数,要么都使用给参数起名字的方式 也可以通过request.path获取到url然后获取相应的参数. 如访问127.0.0.1:8000/

  • 解决Django的request.POST获取不到内容的问题

    我通过如下的一段程序发送post请求: import urllib3 pool = urllib3.connection_from_url('http://127.0.0.1:8090') resp = pool.request('POST', '/polls/', fields={'key1':'value1', 'key2':'value2'}, headers={'Content-Type':'application/json'}, encode_multipart=False) 在服务器

  • 详解Django中Request对象的相关用法

    从Request对象中获取数据 我们在第三章讲述View的函数时已经介绍过HttpRequest对象了,但当时并没有讲太多. 让我们回忆下:每个view函数的第一个参数是一个HttpRequest对象,就像下面这个hello()函数: from django.http import HttpResponse def hello(request): return HttpResponse("Hello world") HttpRequest对象,比如上面代码里的request变量,会有一

  • python中urllib.request和requests的使用及区别详解

    urllib.request 我们都知道,urlopen()方法能发起最基本对的请求发起,但仅仅这些在我们的实际应用中一般都是不够的,可能我们需要加入headers之类的参数,那需要用功能更为强大的Request类来构建了 在不需要任何其他参数配置的时候,可直接通过urlopen()方法来发起一个简单的web请求 发起一个简单的请求 import urllib.request url='https://www.douban.com' webPage=urllib.request.urlopen(

  • Django中Cookie设置及跨域问题处理详解

    目录 什么是Cookie(翻译:曲奇饼干) Cookie怎么来的 为什么要用Cookie Cookie的特点 怎么设置Cookie Cookie常用参数 怎么获取Cookie Cookie跨域问题处理 什么是Cookie(翻译:曲奇饼干) Cookie是存储在浏览器中的一段纯文本信息(简单的说就是浏览器缓存),用来记录用户的使用情况并将其存储在本地设备中,当用户访问服务器时会将Cookie附带上,服务端通过读取Cookie的记录,来维持用户与服务器的会话状态. Cookie怎么来的 Cookie

  • Django中的模型类设计及展示示例详解

    django中设计数据模型类是基于ORM的对象关系映射更方便的进行数据库中的数据操作. 对象关系映射 把面向对象中的类和数据库表--对应,通过操作类和对象,对数表实现数据操作,不需要写sql,由ORM框架生成 django实现了ORM框架,在项目中与数据库之间产生桥梁作用 django数据库定义模型的步骤如下: python manage.py makemigrations python mange.py migrate 在应用models.py中编写模型类,继承models.Model类 在模

  • MySQL中Decimal类型和Float Double的区别(详解)

    MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值. float,double类型是可以存浮点数(即小数类型),但是float有个坏处,当你给定的数据是整数的时候,那么它就以整数给你处理.这样我们在存取货币值的时候自然遇到问题,我的default值为:0.00而实际存储是0,同样我存取货币为12.00,实际存储是12. 幸好mysql提供

  • java 中同步方法和同步代码块的区别详解

    java 中同步方法和同步代码块的区别详解 在Java语言中,每一个对象有一把锁.线程可以使用synchronized关键字来获取对象上的锁.synchronized关键字可应用在方法级别(粗粒度锁)或者是代码块级别(细粒度锁). 问题的由来: 看到这样一个面试题: //下列两个方法有什么区别 public synchronized void method1(){} public void method2(){ synchronized (obj){} } synchronized用于解决同步问

  • include包含头文件的语句中,双引号和尖括号的区别(详解)

    #include <>格式:引用标准库头文件,编译器从标准库目录开始搜索 #incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索 预处理器发现 #include 指令后,就会寻找后跟的文件名并把这个文件的内容包含到当前文件中.被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样. #include 指令有两种使用形式 #include <stdio.h> 文件名放在尖括号

  • js删除数组中的元素delete和splice的区别详解

    例如有一个数组是 :var textArr = ['a','b','c','d']; 这时我想删除这个数组中的b元素: 方法一:delete 删除数组 delete textArr[1]  结果为: ["a",undefined,"c","d"] 只是被删除的元素变成了 undefined 其他的元素的键值还是不变. 方法二:aplice 删除数组 splice(index,len,[item]) 注释:该方法会改变原始数组. index:数组开

  • python中的数组赋值与拷贝的区别详解

    具体的注解我已经写在了程序里面:通俗的解释了python里面的浅拷贝与深拷贝的不同,请看程序. # -*- coding: utf-8 -*- import numpy as np import copy as cp import matplotlib.pyplot as plt import time import math fig = plt.figure() ax = fig.add_subplot(241) # 定义一个多维数组 x = np.array([[1, 2, 3], [4,

  • PyTorch中 tensor.detach() 和 tensor.data 的区别详解

    PyTorch0.4中,.data 仍保留,但建议使用 .detach(), 区别在于 .data 返回和 x 的相同数据 tensor, 但不会加入到x的计算历史里,且require s_grad = False, 这样有些时候是不安全的, 因为 x.data 不能被 autograd 追踪求微分 . .detach() 返回相同数据的 tensor ,且 requires_grad=False ,但能通过 in-place 操作报告给 autograd 在进行反向传播的时候. 举例: ten

  • PyTorch中torch.tensor与torch.Tensor的区别详解

    PyTorch最近几年可谓大火.相比于TensorFlow,PyTorch对于Python初学者更为友好,更易上手. 众所周知,numpy作为Python中数据分析的专业第三方库,比Python自带的Math库速度更快.同样的,在PyTorch中,有一个类似于numpy的库,称为Tensor.Tensor自称为神经网络界的numpy. 一.numpy和Tensor二者对比 对比项 numpy Tensor 相同点 可以定义多维数组,进行切片.改变维度.数学运算等 可以定义多维数组,进行切片.改变

随机推荐