解決Flask和Python中POST請求的問題
P粉476475551
P粉476475551 2023-09-02 14:08:47
0
1
475

我正在編寫一個Flask的POST請求處理程序來新增一個CLIENT。

app = Flask(__name__) CORS(app) @app.post("/api/clients/") def addClient(): data = open('./src/clients.json', 'w ') clients = json.load(data) req = json.loads(request.data) clients.append(req) json.dump(clients, data) data.close() return req

但是當我在瀏覽器中執行這個Javascript的fetch() API時:

let u = "http://url/api/clients/n1/" let b = { "client": "n1", "details": { "address1": "Line1", "address2": "line2", "city": "city", "email": "@", "gst": "gstno" } } const addStudent = async (us, c) => { const response = await fetch(us, { method: "POST", headers: { "Content-Type": "application/json", }, body: c, }); const data = await response.json(); console.log(data); }; addStudent(u, b);

瀏覽器控制台顯示以下錯誤:

訪問'url/api/clients/'的fetch被阻止了,因為來源'null'沒有'Access-Control-Allow-Origin'頭。如果一個不透明的回應滿足您的需求,請將請求的模式設為'no-cors'以停用CORS取得資源。

供參考,這些都是Flask命令列中提到的錯誤:

127.0.0.1 - - [2023 年 3 月 26 日 18:09:05] “POST /api/clients/ HTTP/1.1” 500 - 回溯(最近一次呼叫最後一次): 檔案“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py”,第 2551 行,呼叫 返回 self.wsgi_app(環境,start_response) 檔案“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py”,第 2531 行,在 wsgi_app 中 回應 = self.handle_exception(e) 檔案“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask_cors\extension.py”,第 165 行,位於wrapped_function 中 回傳 cors_after_request(app.make_response(f(*args, **kwargs))) 檔案“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py”,第 2528 行,在 wsgi_app 中 回應 = self.full_dispatch_request() 檔案“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py”,第 1825 行,在 full_dispatch_request 中 rv = self.handle_user_exception(e) 檔案“E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask_cors\extension.py”,第 165 行,位於wrapped_function 中 回傳 cors_after_request(app.make_response(f(*args, **kwargs)))

我是否需要添加特定的頭部,如上述所述,或者我在Flask端存在一些錯誤? 命令列中的最後一行似乎給了CORS錯誤。

P粉476475551
P粉476475551

全部回覆 (1)
P粉459578805

你能否嘗試一下並檢查一下?

方法1

安裝flask-cors

pip install -U flask-cors

然後在應用程式初始化之後,使用預設參數初始化flask-cors:

from flask import Flask from flask_cors import CORS app = Flask(__name__) CORS(app) @app.route("/") def helloWorld(): return "Hello, cross-origin-world!"

更新

方法2

如果你不想使用任何額外的套件,你也可以這樣做

@app.route('your own route', methods=['GET']) def yourMethod(params): response = flask.jsonify({'somekey': 'somevalue'}) # 注意:理想情况下,'*' 应该被替换为你的主机来源 response.headers.add('Access-Control-Allow-Origin', '*') return response

我建議請嘗試使用以下程式碼來定義你的端點

@app.route("/api/clients/", methods=['POST'])

而不是

@app.post("/api/clients/")

參考連結 -Flask http methods

#
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!