Django的views.py中定义的函数的requst参数,可以读request.method确定是POST还是GET

首先,request.GET 和 request.POST是两个对象,类字典对象,提供和字典类似的接口,也有一些别的接口。

什么是POST和GET,这与HTTP协议有关:

这篇博客介绍了两者从原理上和表现形式上的区别,非常清晰,如有需要可阅读原文,下面是一点小结和摘录:

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

2、POST和GET都可以与服务器交互完成查、改、增、删的操作。

3、

(1)GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。(一个简单的url例子:http://127.0.0.1:8000/search/?q=Django 只有一个参数 所以没用&)如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

  POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据

     因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变

    (2)传输数据的大小:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。

而在实际开发中存在的限制主要有:

GET:特定浏览器和服务器对URL长度有限制,例如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

因此对于GET提交时,传输数据就会受到URL长度的限制。

POST:由于不是通过URL传值,理论上数据不受限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

4、对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。


在Django Book中提到:

POST数据是来自HTML中的〈form〉标签提交的,而GET数据可能来自〈form〉提交也可能是URL中的查询字符串(the query string)。

Django Book第七章给出的代码例子中,views.py的处理函数开始会验证request.method是否为POST:

确认request.method的值是’POST’。用户浏览表单时这个值并不存在,当且仅当表单被提交时这个值才出现。 (在后面的例子中,request.method将会设置为’GET’,因为在普通的网页浏览中,浏览器都使用GET,而非POST)。判断request.method的值很好地帮助我们将表单显示与表单处理隔离开来。

如果在视图里通过POST获取数据,那么request.GET将为空。

使用request.POST.get()方法 可以获取表单指定键的值内容  并可以在获取表单内容的同时提供一个默认值防止该键对应的值为空



在Django中 request.POST常常和form对象一起用,用来初始化一个form  如下面所示 先判断方法是否为POST 然后用request.POST对已有的Form对象ContactForm进行初始化。request.POST本身也是类字典对象,所以可以用于Form的初始化。


[python] view plaincopy

  1. if request.method == 'POST':  
  2.     form = ContactForm(request.POST)  




附上一点摘记:

8)接受request的数据 
从post中取得数据,如果不存在则默认值为1 
pageNumber = request.POST.get('pageNumber',1) 
从get中取得数据,如果不存在则默认值为1 
pageNumber = request.GET.get('pageNumber',1) 
从所有请求中取得数据,如果不存在则默认值为1 
pageNumber = request.REQUEST.get('pageNumber',1) 
判断一个请求是post还是get方式 
if request.method == 'GET': 
对于request的操作可以参考 

http://www.woodpecker.org.cn/obp/django/django-faq/request_response.html


对于GET和POST提供的方法可以参考


http://djangobook.py3k.cn/appendixH/

如get、copy等方法的注解