在一個render.html檔案中,我有一個呼叫render.js中一個函式的按鈕(我在腳本中把render.js作為src包含在內)
<button type="button" onclick="someFunc()">Calculate</button>
在render.js中someFunc()提出請求
options = {
方法。"POST"/span>,
headers: {
"Content-Type" : "application/json".
},
body: JSON.stringify( feat1dataObj)
}
const test1 = await fetch('http: /localhost:5000/analyzeInput', options)。
app.py是應該處理請求的后端
from flask import Flask, jsonify, request
app = Flask(__name__)。
def analyzeData(res)。
part1Len = request.json['part1Len']
print(part1Len)。
res = jsonify( {"Testing":"1"}。)
res.headers.add('Access-Control-Allow-Origin', '*')
res.headers.set('Access-Control-Allow-Methods', 'GET, POST')
return res;
#start server;
if __name__ == "__main__"/span>:
app.run(debug=True)。
但是我得到405 ""Method Not Allowed The method is not allowed for the requested URL";典型的解決方案是method = ["POST"]不包括在內,但是我有這個問題。
似乎我正在做一個GET請求?
總的來說,我正在使用 ElectronJS 制作一個 GUI,只是想把資料從 GUI 傳遞給 Python 腳本來處理,不知道為什么教程要推薦托管;似乎應該有一種更簡單的方法來做到這一點。
編輯:
@app. route('/analyzeInput'/span>, methods = ['GET'/span>, 'POST'/span>, 'OPTIONS'/span>] )
#def analyzeData(res):
#def analyzeData(request):
def analyzeData() 。
if request.method == 'POST'/span>:
print("enter analyzeInput")
#part1Len = request.json['part1Len'].
#print(part1Len);
res = jsonify( {"Testing":"1"}。)
res.headers.add('Access-Control-Allow-Origin', '*')
#res.headers.set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS')
res.headers.add('Access-Control-Allow-Headers'/span>, 'Origin, X-Requested-With, Content-Type, Accept'/span>)
return res。
代碼目前看起來是這樣的(我把analyzeData改為analyzeInput;并且到處都改了,所以我不擔心這部分)。得到 "view function for 'analyzeData' did not return a valid response. 該函式要么回傳無,要么在沒有回傳陳述句的情況下結束 "作為內部服務器錯誤。
再次,我非常確定問題在于請求是以 "GET "而不是 "POST "的方式發送的,但找不到對此的解釋。 新輸出
uj5u.com熱心網友回復:
除了@john mba的答案之外,你應該添加mode。"cors"到你的選項中
uj5u.com熱心網友回復:
這是一個跨網站源(CORS)問題。從你的代碼中,我可以看到你已經解決了這個問題,但是在app.route中添加了這樣的選項。
標籤: 上一篇:涉及種類`Nat`的乘法問題
下一篇:Terraform匯入地圖資源@app.route('/analyzeInput', methods = ['POST', 'OPTIONS'] )/code> 。原因是瀏覽器會重寫請求,并將請求方法改為選項,以符合2014年生效的跨網站源(CORS)政策。
