Flask CORS

Salman Mehmood 2024年2月15日
Flask CORS

我們將通過此解釋瞭解在 Flask 應用程式中建立 API 時出現的問題,以及如何在從不同域訪問 Flask 應用程式時修復錯誤。

在 Flask 中使用 CORS 類修復跨域問題

有時我們建立了一個 API,但我們沒有任何問題將其提供給使用者,但是當我們要與前端整合時,這個問題就來了;這是我們需要解決的跨域請求。

我們將討論如何解決前端報告的問題,通常是前端開發人員報告的問題,因為最初當我們在 Flask 中建立 API 時,我們不會檢視解決此 CORS 將採取的步驟代表跨域資源共享的問題。

第一步,我們需要安裝一個名為 Flask-Cors 的內建模組;一旦安裝了這個模組,那麼我們將在我們的應用程式中使用它。

pip install Flask-Cors

現在我們需要匯入 CORS,這個模組負責所有型別的 CORS 問題;它將能夠解決來自前端的任何請求。

from flask_cors import CORS

現在我們需要建立一個 Flask 應用程式並將該應用程式包裝到 CORS 類中,以便該應用程式負責接受任何請求。它可以是路由上的直接請求或其他請求。

from flask import Flask, Response
from json import dumps
from flask_cors import CORS

app = Flask(__name__)
CORS(app)


@app.route("/", methods=["GET"])
def User_Access():
    return Response(dumps({"User_KEY": "ADB11081"}), mimetype="text/json")


app.run(port=5000)

有幾種方法可以在我們的應用程式中使用它;最簡單的方法是將整個應用程式包裝在 CORS() 類中;在前面的示例中,我們已經研究瞭如何做到這一點。

其次,我們可以定義我們想要訪問的域以及我們在應用程式中允許的某些特定內容。

讓我們建立一個名為 cors 的變數,然後傳入幾個選項​​,第一個是應用程式本身,第二個是 resources,這是一個關鍵字引數,我們可以在其中指定我們想要允許訪問的內容。

我們使用的是正規表示式,然後在引號內,我們將放置一個路由,在斜線之後,我們可以指定一個特定的使用者,或者我們可以傳遞一個星號來允許所有使用者訪問。

之後,我們定義允許訪問的域,所以我們必須輸入 origins;然後,我們可以給它一個允許訪問的來源或域的列表。

在我們的例子中,我們向它傳遞了一個星號符號,表示網際網路上可以訪問我們所有 API 路由的任何域。

from flask import Flask, Response
from json import dumps
from flask_cors import CORS

app = Flask(__name__)


cors = CORS(app, resources={r"/*": {"origins": "*"}})


@app.route("/", methods=["GET"])
def User_Access():
    return Response(dumps({"User_KEY": "ADB11081"}), mimetype="text/json")


app.run(port=5000)

現在我們將執行伺服器,進入瀏覽器,然後看看在開發者模式中發生了什麼。我們可以看到所有域都允許 Access-Control-Allow-Origin

在 Flask 中使用 CORS 類修復跨域問題

作者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn