Django学习之限制请求(七)

       在实际的工作中,可能由于需求,对某些请求,我们只限制发送GET请求或者POST请求,不能发送其它的请求,

那么这个时候如何在Django中实现了?

      假设这里写一个首页的连接,访问整个index的页面,见在Django中视图的函数源码:

from django.shortcuts import render,redirect
from django.http import  HttpResponse,JsonResponse,StreamingHttpResponse
from django.views.decorators.http import require_http_methods
from django.template import  loader
from django.views import View

# Create your views here.

from .models import  *


def blog(request):
    return HttpResponse('ok')

 在视图函数blog中,我们使用postman来发送GET请求,来看请求的结果,见POSTMAN的请求结果信息:

我们再对该请求发送POST请求来看实际的效果,见POSTMAN的请求截图:

     事实上,在这个案例中,我们只需要发送GET请求就可以了,根本就不需要发送POST的请求,那么如何在代码中限制了,在Django中

导入

from django.views.decorators.http import require_http_methods

 

就可以解决该问题,也就是在视图函数中增加装饰器require_http_methods后,然后在列表中指定该视图函数只能GET请求或者是

POST请求,在该案例中,我们的视图函数只能GET请求,继续完善该代码,见完善后的代码:

from django.shortcuts import render,redirect
from django.http import  HttpResponse,JsonResponse,StreamingHttpResponse
from django.views.decorators.http import require_http_methods
from django.template import  loader
from django.views import View

# Create your views here.

from .models import  *


@require_http_methods(['GET'])
def blog(request):
    return HttpResponse('ok')

 

完善如上的代码后,再次发送POST的请求,就会返回405的状态码,见POSTMAN的请求截图:

      在实际的工作中,特别是编写的视图函数,如果只想让某一个请求的时候,其它请求不想让访问,可以使用require_http_methods来解决该问题,

这样就不需要在视图的函数中做的判断了,如果不这样写,需要在视图的函数中需要做判断,假设只能是GET请求,就得判断如果是GET请求返回

什么内容,如果是POST请求,程序怎么处理,这样视图函数显得比较复杂。

 

posted @ 2019-01-21 17:26  无涯(WuYa)  阅读(419)  评论(0编辑  收藏  举报