欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Django實現(xiàn)跨域請求過程詳解

 更新時間:2019年07月25日 15:26:32   作者:Title  
這篇文章主要介紹了Django實現(xiàn)跨域請求過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

CORS 即 Cross Origin Resource Sharing 跨域資源共享.

跨域請求分兩種:簡單請求、復(fù)雜請求.

簡單請求

簡單請求必須滿足下述條件.

HTTP方法為這三種方法之一:HEAD、GET、POST

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

Accept、Accept-Language、Content-Language、Last-Event-ID

且Content-Type只能為下列類型中的某一個:

  • application/x-www-from-urlencoded
  • multipart/form-data
  • text/plain.

==任何不滿足上述要求的請求,都會被認(rèn)為是復(fù)雜請求.

復(fù)雜請求會先發(fā)出一個預(yù)請求——預(yù)檢,OPTIONS請求.==

瀏覽器的同源策略

無法跨域就是被瀏覽器的同源策略限制的.

也就是說,==瀏覽器會阻止非同源的請求.==

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

==瀏覽器只會阻止表單以及Ajax請求的跨域,但不會阻止src請求跨域.==

所以,我們的cdn、圖片等src請求都是正常的.

JsonP實現(xiàn)跨域

==JsonP跨域的原理是利用了瀏覽器不阻止src請求跨域來實現(xiàn)的.==

==JsonP只能實現(xiàn)GET請求跨域.==

首先 準(zhǔn)備我們的視圖文件

from django.http import HttpResponse
from rest_framework.views import APIView

class TestView(APIView):
  def get(self, request):
    return HttpResponse("handlerResponse('is ok')")
    # 注意返回的函數(shù)以及參數(shù)的格式

然后 HTML文件

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <title>JsonP跨站請求測試</title>
</head>
<body>
<script>
  // 函數(shù)名應(yīng)為handlerResponse,這是一種約定俗成
  function handlerResponse(data) {
    alert(data)
  }
</script>
<!--必須放在被執(zhí)行函數(shù)的script標(biāo)簽的下面,否則會報錯函數(shù)不存在-->
<script src="http://127.0.0.1:8000/test/"></script>
</body>
</html>

好了 我們來測試吧


可以看到,我們成功實現(xiàn)了跨域獲取數(shù)據(jù).

JsonP解決跨域只能發(fā)送GET請求,并且實現(xiàn)起來前后端交互會比較多,現(xiàn)在幾乎已經(jīng)不在使用了

在Django中間件中添加響應(yīng)頭

可實現(xiàn)簡單請求和復(fù)雜請求的跨域

第一步 準(zhǔn)備中間件

from django.utils.deprecation import MiddlewareMixin

class MyCors(MiddlewareMixin):
  def process_response(self, request, response):
    # 如下,等于'*'后,便可允許所有簡單請求的跨域訪問
    response['Access-Control-Allow-Origin'] = '*'

    # 判斷是否為復(fù)雜請求
    if request.method == 'OPTIONS':
      response['Access-Control-Allow-Headers'] = 'Content-Type'
      response['Access-Control-Allow-Methods'] = 'PUT,PATCH,DELETE'

    return response

寫好之后,別忘記了去注冊.

第二步 視圖文件

from django.http import HttpResponse
from rest_framework.views import APIView

class TestView(APIView):
  def get(self, request):
    return HttpResponse("這是GET請求的數(shù)據(jù)")
  def post(self, request):
    return HttpResponse("這是POST請求的數(shù)據(jù)")
  def put(self, request):
    return HttpResponse("這是PUT請求的數(shù)")

第三步 HTML文件

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  <title>test</title>
</head>
<body>
<button id="sign">點擊發(fā)送跨站請求</button>
<script>
  $('#sign').click(function () {
    $.ajax({
      url: 'http://127.0.0.1:8000/test/', // 要訪問的外站
      type: 'put', // 請求類型, put為復(fù)雜請求
      contentType: 'application/json', // 指定為'application/json'后,將變?yōu)閺?fù)雜請求
      success: function (data) {
        // 請求成功后將執(zhí)行該函數(shù)
        // data是外站發(fā)送過來的數(shù)據(jù)
        alert(data)
      },
    });
  });
</script>
</body>
</html>

測試效果如下


可見,我們實現(xiàn)了復(fù)雜請求的跨域,簡單請求就更不用說了.

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python在Word表格中插入或刪除行或列的幾種方法

    使用Python在Word表格中插入或刪除行或列的幾種方法

    Word文檔中的表格可以用于組織和展示數(shù)據(jù),在實際應(yīng)用過程中,有時為了調(diào)整表格的結(jié)構(gòu)或適應(yīng)不同的數(shù)據(jù)展示需求,我們可能會需要插入、刪除行或列,本文提供了幾種使用Python在Word表格中插入或刪除行、列的方法供參考
    2024-07-07
  • 詳解Python中生成隨機(jī)數(shù)據(jù)的示例詳解

    詳解Python中生成隨機(jī)數(shù)據(jù)的示例詳解

    在日常工作編程中存在著各種隨機(jī)事件,同樣在編程中生成隨機(jī)數(shù)字的時候也是一樣。每當(dāng)在?Python?中生成隨機(jī)數(shù)據(jù)、字符串或數(shù)字時,最好至少大致了解這些數(shù)據(jù)是如何生成的。所以本文將詳細(xì)為大家講解一下Python是如何生成隨機(jī)數(shù)據(jù),需要的可以參考一下
    2022-04-04
  • numpy中的掩碼數(shù)組的使用

    numpy中的掩碼數(shù)組的使用

    本文主要介紹了numpy中的掩碼數(shù)組的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python多線程結(jié)合隊列下載百度音樂的方法

    Python多線程結(jié)合隊列下載百度音樂的方法

    這篇文章主要介紹了Python多線程結(jié)合隊列下載百度音樂的方法,實例分析了Python多線程及文件下載的相關(guān)實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 詳解如何使用Python隱藏圖像中的數(shù)據(jù)

    詳解如何使用Python隱藏圖像中的數(shù)據(jù)

    隱寫術(shù)是在任何文件中隱藏秘密數(shù)據(jù)的藝術(shù)。隱寫術(shù)的主要目的是隱藏任何文件中的預(yù)期信息,而不實際改變文件的外觀,即文件外觀看起來和以前一樣。本文將利用Python實現(xiàn)隱藏圖像中的數(shù)據(jù),需要的可以參考一下
    2022-02-02
  • Python 網(wǎng)絡(luò)編程說明

    Python 網(wǎng)絡(luò)編程說明

    socket 是網(wǎng)絡(luò)連接端點。
    2009-08-08
  • opencv調(diào)用yolov3模型深度學(xué)習(xí)目標(biāo)檢測實例詳解

    opencv調(diào)用yolov3模型深度學(xué)習(xí)目標(biāo)檢測實例詳解

    這篇文章主要為大家介紹了opencv調(diào)用yolov3模型深度學(xué)習(xí)目標(biāo)檢測實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • python中int與str互轉(zhuǎn)方法

    python中int與str互轉(zhuǎn)方法

    最近學(xué)習(xí)python中的數(shù)據(jù)類型時,難免聯(lián)想到j(luò)ava中的基本型數(shù)據(jù)類型與引用型數(shù)據(jù)類型。接下來通過本文給大家介紹python中int與str互轉(zhuǎn),需要的朋友可以參考下
    2018-07-07
  • Pytorch可視化之Visdom使用實例

    Pytorch可視化之Visdom使用實例

    Visdom 是一個專門用于 PyTorch 的交互式可視化工具,可以對實時數(shù)據(jù)進(jìn)行豐富的可視化,幫助我們實時監(jiān)控在遠(yuǎn)程服務(wù)器上進(jìn)行的科學(xué)實驗,這篇文章主要給大家介紹了關(guān)于Pytorch可視化之Visdom使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • python 使用paramiko模塊進(jìn)行封裝,遠(yuǎn)程操作linux主機(jī)的示例代碼

    python 使用paramiko模塊進(jìn)行封裝,遠(yuǎn)程操作linux主機(jī)的示例代碼

    這篇文章主要介紹了python 使用paramiko模塊進(jìn)行封裝,遠(yuǎn)程操作linux主機(jī)的示例代碼,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12

最新評論