django实现跨域请求的方法有哪些

  介绍

这篇文章给大家分享的是有关django实现跨域请求的方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

歌珥即交叉起源资源共享跨域资源共享。

跨域请求分两种:简单请求,复杂请求。

<强>简单请求

简单请求必须满足下述条件。

HTTP方法为这三种方法之一:头,得到文章

HTTP头消息不超出以下字段:

接受,接收语言,内容语言,Last-Event-ID

且内容类型只能为下列类型中的某一个:

应用程序/x-www-from-urlencodedmultipart/form-datatext平原。

==任何不满足上述要求的请求,都会被认为是复杂请求。

<强>复杂请求

会先发出一个预请求——预检,选项请求。==

浏览器的同源策略

无法跨域就是被浏览器的同源策略限制的。

也就是说,==浏览器会阻止非同源的请求。==

那什么是非同源呢?==域名或端口不同的,都属于非同源。==

==浏览器只会阻止表单以及Ajax请求的跨域,但不会阻止src请求跨域。==

所以,我们的cdn,图片等src请求都是正常的。

JsonP实现跨域

==JsonP跨域的原理是利用了浏览器不阻止src请求跨域来实现的。==

==JsonP只能实现得到请求跨域。==

首先准备我们的视图文件

得到django.http  import  HttpResponse   得到rest_framework.views  import  APIView      class  TestView (APIView):   def 才能得到(自我,,请求):   ,,,return  HttpResponse (“handlerResponse (& # 39; is 好# 39;)“)   ,,,#,注意返回的函数以及参数的格式

然后html文件

& lt; ! DOCTYPE  html>   & lt; html>   & lt; head>   & lt;才能title> JsonP跨站请求测试& lt;/title>   & lt;/head>   & lt; body>   & lt; script>//才能,函数名应为handlerResponse,这是一种约定俗成   function 才能handlerResponse(数据),{   ,,,警报(数据)   ,,}   & lt;/script>   & lt; !——必须放在被执行函数的脚本标签的下面,否则会报错函数不存在,在   https://www.yisu.com/zixun/& lt; script  src=" http://127.0.0.1:8000/测试/">   身体   

 django实现跨域请求的方法有哪些

可以看的到,我们成功实现了跨域获取数据。

JsonP解决跨域只能发送得到请求,并且实现起来前后端交互会比较多,现在几乎已经不在使用了

在Django中间件中添加响应头

可实现简单请求和复杂请求的跨域

第一步准备中间件

得到django.utils.deprecation  import  MiddlewareMixin      class  MyCors (MiddlewareMixin):   def 才能;process_response(自我,,请求,响应):   ,,,#,如下,等于& # 39;* & # 39;后,便可允许所有简单请求的跨域访问   ,,,反应[& # 39;Access-Control-Allow-Origin& # 39;],=, & # 39; * & # 39;      ,,,#,判断是否为复杂请求   ,,,if  request.method ==, & # 39;选项# 39;:   ,,,,,反应[& # 39;Access-Control-Allow-Headers& # 39;],=, & # 39;内容类型# 39;   ,,,,,反应[& # 39;Access-Control-Allow-Methods& # 39;],=, & # 39;说,补丁,删除# 39;      ,,,return 响应

写好之后,别忘记了去注册。

第二步视图文件

得到django.http  import  HttpResponse   得到rest_framework.views  import  APIView      class  TestView (APIView):   def 才能得到(自我,,请求):   ,,,return  HttpResponse(“这是得到请求的数据“)   def 才能发布(自我,,请求):   ,,,return  HttpResponse(“这是帖子请求的数据“)   def 才能;(自我,,请求):   ,,,return  HttpResponse(“这是把请求的数“)

第三步HTML文件

& lt; ! DOCTYPE  html>   & lt; html>   & lt; head>   & lt;才能https://www.yisu.com/zixun/script  src=" https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js ">   <标题>测试   头   <身体>   <按钮id="标志">点击发送跨站请求>   $(" #符号”)。点击(函数(){   . ajax({美元   url: http://127.0.0.1:8000/测试/,//要访问的外站   类型:‘把’,//请求类型,把为复杂请求   contentType: application/json,//指定为“application/json”后,将变为复杂请求   成功:功能(数据){//请求成功后将执行该函数//数据是外站发送过来的数据   警报(数据)   },   });   });>

django实现跨域请求的方法有哪些