客户端对服务器发起的HTTP请求时,并不是所有的请求方式都允许被调用的,比如说提交表单的HTTP请求处理方法,可能只允许使用POST 方式提交的才能够被调用,而实用GET方式提交的请求是不被允许的。为了实现这个目的,可以使用到视图装饰器(View Decorators)(很早之前就看到过这种用法,只是没有仔细去了解,今天翻工作日记时,发现曾经记过一笔,今天找了一篇不错的文章,跟大家一起学习,当然最好是能看看源码,这样理解会更深刻)。如果请求是不被允许的,则会抛出django.http.HttpResponseNotAllowed的 HttpResponse响应。常用视图装饰器如下:

require_http_methods(request_method_list)

通过提供一个允许的请求方式的list集合来限制请求视图方法的调用,示例如下:

from django.views.decorators.http import require_http_methods

@require_http_methods(["GET","POST"])
def view(request):
    pass

通过添加一个视图装饰器后,只有my_view方法只有通过GET和POST方法提交的HTTP请求,才被允许调用。

require_GET()

视图处理方法只允许处理GET方式的HTTP请求。

require_POST()

视图处理方法只允许处理POST方式的HTTP请求。

require_safe()

视图处理方法只允许处理GET和POST方式的HTTP请求,这两种请求方法通常是被认为是安全的HTTP请求。

 HTTP请求方式有很多,不仅仅只有POST,GET。

具体如下,可以理解下。

序号
方法
描述
1
GET
请求指定的页面信息,并返回实体主体
2
HEAD
类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
3
POST向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
4
PUT从客户端向服务器传送的数据取代指定的文档的内容。
5
DELETE请求服务器删除指定的页面。
6
CONNECTHTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
7
OPTIONS允许客户端查看服务器的性能。
8
TRACE回显服务器收到的请求,主要用于测试或诊断。
9
PATCH 实体中包含一个表,表中说明与该URI所表示的原内容的区别。
10
MOVE请求服务器将指定的页面移至另一个网络地址。
11
COPY请求服务器将指定的页面拷贝至另一个网络地址。
12
LINK请求服务器建立链接关系。
13
UNLINK断开链接关系。
14
WRAPPED允许客户端发送经过封装的请求。
15
Extension-mothed在不改动协议的前提下,可增加另外的方法。


转自:http://www.xcoder.cn/index.php/archives/1710