解決Flask和Python中POST請求的問題
<p>我正在編寫一個Flask的POST請求處理程序來新增一個CLIENT。 </p>
<pre class="brush:php;toolbar:false;">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</pre>
<p>但是當我在瀏覽器中執行這個Javascript的<code>fetch()</code> API時:</p>
<pre class="brush:php;toolbar:false;">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);</pre>
<p>瀏覽器控制台顯示以下錯誤:</p>
<blockquote>
<p>訪問'url/api/clients/'的fetch被阻止了,因為來源'null'沒有'Access-Control-Allow-Origin'頭。如果一個不透明的回應滿足您的需求,請將請求的模式設為'no-cors'以停用CORS取得資源。</p>
</blockquote>
<p>供參考,這些都是Flask命令列中提到的錯誤:</p>
<blockquote>
<p>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 行,<strong>呼叫</strong>
返回 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)))</p>
</blockquote>
<p><strong>我是否需要添加特定的頭部,如上述所述,或者我在Flask端存在一些錯誤? </strong>
命令列中的最後一行似乎給了CORS錯誤。 </p>