🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 第一节:限制请求method # Django限制请求method ## 常用的请求method: 1. GET请求:GET请求一般用来向服务器索取数据,但不会向服务器提交数据,不会对服务器的状态进行更改。比如向服务器获取某篇文章的详情。 2. POST请求:POST请求一般是用来向服务器提交数据,会对服务器的状态进行更改。比如提交一篇文章给服务器。 ## 限制请求装饰器: `Django`内置的视图装饰器可以给视图提供一些限制。比如这个视图只能通过`GET`的`method`访问等。以下将介绍一些常用的内置视图装饰器。 1. `django.http.decorators.http.require_http_methods`:这个装饰器需要传递一个允许访问的方法的列表。比如只能通过`GET`的方式访问。那么示例代码如下: ``` <pre class="calibre12">``` <span class="hljs-keyword">from</span> django.views.decorators.http <span class="hljs-keyword">import</span> require_http_methods <span class="hljs-class"> @require_http_methods(["GET"])</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">my_view</span><span class="hljs-params">(request)</span>:</span> <span class="hljs-keyword">pass</span> ``` ``` 2. `django.views.decorators.http.require_GET`:这个装饰器相当于是`require_http_methods(['GET'])`的简写形式,只允许使用`GET`的`method`来访问视图。示例代码如下: ``` <pre class="calibre12">``` <span class="hljs-keyword">from</span> django.views.decorators.http <span class="hljs-keyword">import</span> require_GET <span class="hljs-class"> @require_GET</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">my_view</span><span class="hljs-params">(request)</span>:</span> <span class="hljs-keyword">pass</span> ``` ``` 3. `django.views.decorators.http.require_POST`:这个装饰器相当于是`require_http_methods(['POST'])`的简写形式,只允许使用`POST`的`method`来访问视图。示例代码如下: ``` <pre class="calibre12">``` <span class="hljs-keyword">from</span> django.views.decorators.http <span class="hljs-keyword">import</span> require_POST <span class="hljs-class"> @require_POST</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">my_view</span><span class="hljs-params">(request)</span>:</span> <span class="hljs-keyword">pass</span> ``` ``` 4. `django.views.decorators.http.require_safe`:这个装饰器相当于是`require_http_methods(['GET','HEAD'])`的简写形式,只允许使用相对安全的方式来访问视图。因为`GET`和`HEAD`不会对服务器产生增删改的行为。因此是一种相对安全的请求方式。示例代码如下: ``` <pre class="calibre12">``` <span class="hljs-keyword">from</span> django.views.decorators.http <span class="hljs-keyword">import</span> require_safe <span class="hljs-class"> @require_safe</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">my_view</span><span class="hljs-params">(request)</span>:</span> <span class="hljs-keyword">pass</span> ``` ```