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请求,程序怎么处理,这样视图函数显得比较复杂。
欢迎关注微信公众号“Python自动化测试”