django实现跨域请求的方法有哪些
这篇文章给大家分享的是有关django实现跨域请求的方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。
CORS 即 Cross Origin Resource Sharing 跨域资源共享.
跨域请求分两种:简单请求、复杂请求.
简单请求
简单请求必须满足下述条件.
HTTP方法为这三种方法之一:HEAD、GET、POST
HTTP头消息不超出以下字段:
Accept、Accept-Language、Content-Language、Last-Event-ID
且Content-Type只能为下列类型中的某一个:
application/x-www-from-urlencodedmultipart/form-datatext/plain.
==任何不满足上述要求的请求,都会被认为是复杂请求.
复杂请求
会先发出一个预请求——预检,OPTIONS请求.==
浏览器的同源策略
无法跨域就是被浏览器的同源策略限制的.
也就是说,==浏览器会阻止非同源的请求.==
那什么是非同源呢?==域名或端口不同的,都属于非同源.==
==浏览器只会阻止表单以及Ajax请求的跨域,但不会阻止src请求跨域.==
所以,我们的cdn、图片等src请求都是正常的.
JsonP实现跨域
==JsonP跨域的原理是利用了浏览器不阻止src请求跨域来实现的.==
==JsonP只能实现GET请求跨域.==
首先 准备我们的视图文件
fromdjango.httpimportHttpResponsefromrest_framework.viewsimportAPIViewclassTestView(APIView):defget(self,request):returnHttpResponse("handlerResponse('isok')")#注意返回的函数以及参数的格式
然后html文件
<!DOCTYPEhtml><html><head><title>JsonP跨站请求测试</title></head><body><script>//函数名应为handlerResponse,这是一种约定俗成functionhandlerResponse(data){alert(data)}</script><!--必须放在被执行函数的script标签的下面,否则会报错函数不存在--><scriptsrc="http://127.0.0.1:8000/test/"></script></body></html>
可以看到,我们成功实现了跨域获取数据.
JsonP解决跨域只能发送GET请求,并且实现起来前后端交互会比较多,现在几乎已经不在使用了
在Django中间件中添加响应头
可实现简单请求和复杂请求的跨域
第一步 准备中间件
fromdjango.utils.deprecationimportMiddlewareMixinclassMyCors(MiddlewareMixin):defprocess_response(self,request,response):#如下,等于'*'后,便可允许所有简单请求的跨域访问response['Access-Control-Allow-Origin']='*'#判断是否为复杂请求ifrequest.method=='OPTIONS':response['Access-Control-Allow-Headers']='Content-Type'response['Access-Control-Allow-Methods']='PUT,PATCH,DELETE'returnresponse
写好之后,别忘记了去注册.
第二步 视图文件
fromdjango.httpimportHttpResponsefromrest_framework.viewsimportAPIViewclassTestView(APIView):defget(self,request):returnHttpResponse("这是GET请求的数据")defpost(self,request):returnHttpResponse("这是POST请求的数据")defput(self,request):returnHttpResponse("这是PUT请求的数")
第三步 HTML文件
<!DOCTYPEhtml><html><head><scriptsrc="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script><title>test</title></head><body><buttonid="sign">点击发送跨站请求</button><script>$('#sign').click(function(){$.ajax({url:'http://127.0.0.1:8000/test/',//要访问的外站type:'put',//请求类型,put为复杂请求contentType:'application/json',//指定为'application/json'后,将变为复杂请求success:function(data){//请求成功后将执行该函数//data是外站发送过来的数据alert(data)},});});</script></body></html>
测试效果如下
感谢各位的阅读!关于django实现跨域请求的方法有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。