Django之使用中間件解決前後端同源策略問題

来源:https://www.cnblogs.com/yifchan/archive/2019/09/01/python-1-32.html
-Advertisement-
Play Games

Django之使用中間件解決前後端同源策略問題,前端時間在公司的時候,要使用angular開發一個網站,因為angular很適合前後端分離,所以就做了一個簡單的圖書管理系統來模擬前後端分離 但是在開發過程中遇見了同源策略的跨域問題,頁面能夠顯示,但是卻沒有數據。 ...


問題描述

前端時間在公司的時候,要使用angular開發一個網站,因為angular很適合前後端分離,所以就做了一個簡單的圖書管理系統來模擬前後端分離。

但是在開發過程中遇見了同源策略的跨域問題,頁面能夠顯示,但是卻沒有數據,顯示如下

右鍵檢查報錯如下:

報錯代碼如下

Failed to load http://127.0.0.1:8888/publisher/: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:4200' is therefore not allowed access.

 

angular從後端獲取數據的代碼如下:

private publishersUrl = 'http://127.0.0.1:8888/publisher/';
private addpubUrl = 'http://127.0.0.1:8888/addpub/';


getPublishers (): Observable<Publisher[]> {
    return this.http.get<Publisher[]>(this.publishersUrl)
    .pipe(
      catchError(this.handleError<Publisher[]>('getPublishers', []))
    ); 
}

問題原因

出現這個問題的原因是同源策略的跨域問題,關於這個問題不在此處詳細討論,如有興趣可以去搜索一下。

 

問題解決

解決這個問題關鍵在於後端,要允許其他網站進行訪問,在這裡我們可以定義一個中間件來解決這個問題,步驟如下。

1.在app下新建一個myMiddleware.py文件。

2.在文件中加入以下代碼

from django.utils.deprecation import MiddlewareMixin


class MyCore(MiddlewareMixin):
    def process_response(self, request, response):
        response['Access-Control-Allow-Origin'] = "*"
        if request.method == "OPTIONS":
            # 複雜請求 預檢
            response['Access-Control-Allow-Headers'] = "Content-Type"
            response['Access-Control-Allow-Methods'] = "POST, DELETE, PUT"
        return response

3.去settings文件中註冊中間件

MIDDLEWARE = [
    'BMS.myMiddleware.MyCore',
]

 

至此,這個問題就算解決了,我們可以將項目運行起來看一下結果

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Node.js是一個基於 Chrome V8 引擎的 JavaScript 運行環境;Node.js使用一個事件驅動、非阻塞式 I/O 的模型,使其輕量且高效;Node.js的軟體包生態系統npm是全球最大的開源庫生態系統。本文詳細介紹了Node.js的安裝、配置及測試教程,希望對您有所幫助。 ...
  • 前言 Koa 應用程式是一個包含一組中間件函數的對象,它是按照類似堆棧的方式組織和執行的。 當一個中間件調用 next() 則該函數暫停並將控制傳遞給定義的下一個中間件。當在下游沒有更多的中間件執行後,堆棧將展開並且每個中間件恢復執行其上游行為。 以上兩句話,是我在官方文檔中找到其對 Koa 中間件 ...
  • 下載:curl -L https://get.daocloud.io/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose 許可權:chm ...
  • 根據這個問題和答案 - Python multiprocessing.cpu_count()在4核Nvidia Jetson TK1上返回'1' - Python multiprocessing.cpu_count()在某些系統上的功能輸出反映了主動使用的CPU數量,而不是CPU的數量實際上可以通過 ...
  • 模塊導入 當文件夾中有這樣一個自定義的command模塊 在它的內部寫下下列代碼: 然後我們在command模塊中執行下列代碼: 我們如果在這段程式中反覆執行多次這一段代碼,這一個文件結果也只會被導入一次 調用command模塊中的方法fuc() 當我們寫這樣一個代碼的時候,電腦會先去找到這一個模 ...
  • 一、typedef的用法 1.用typedef來聲明新的類型名,來代替已有的類型名,也就是給類型起別名。比如 這種用法經常用來作為定義與平臺無關的類型,方便代碼的跨平臺移植。 例如,定義REAL類型為目標平臺精度最高的類型。 1>在支持long double的平臺上定義為: 註:long doubl ...
  • 你寫的的單例模式多線程下是否安全?是否懶載入?如何防止反射破壞單例模式?閱讀本文,解鎖單例模式的更多細節。 ...
  • ​一、break 1.break是Java語言中的關鍵字,被翻譯為“中斷/折斷” 2.break + ";"可以成為一個單獨的完整的java語句: break; 3.break語句使用在switch語句中用來終止switch語句的執行 4.break語句同樣可以使用在迴圈語句中,用來終止迴圈的執行 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...