我在 Flask 上作為 POST 請求提供我的機器學習模型。
我能夠在 Postman 中成功發出 POST 請求,但是,在客戶端上,嘗試在 Next 中獲取該端點時收到 CORS 錯誤。
我有以下server.py
from flask import Flask, request, jsonify
import pickle
from flask_cors import CORS
app = Flask(__name__)
cors = CORS(app)
@app.route('/predict', methods=['POST'])
def predict():
if request.method == 'POST':
data = request.get_json()
sentence = data['sentence']
vectoriser, LRmodel = load_models()
if vectoriser and LRmodel:
vector = vectoriser.transform([sentence])
prediction = LRmodel.predict(vector)
# return jsonify({'prediction': str(prediction[0])})
if prediction[0] == 1:
return jsonify({'prediction': 'Positive'})
else :
return jsonify({'prediction': 'Negative'})
else:
return jsonify("Error")
return 'Error'
if __name__ == '__main__':
app.run(debug=True)
這是我嘗試在客戶端上呼叫此端點的方式
const Sentiment = (props: any) => {
return (
<>
<h1 style={{ textAlign: 'center' }}>Sentiment</h1>
<div style={{ textAlign: 'center' }}>
<form action="/sentiment" method="POST" onSubmit={handleSubmit}>
<input type="text" name="sentiment" />
<button type="submit">Submit</button>
</form>
</div>
</>
)
}
const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault()
console.log(e.currentTarget.sentiment.value)
const res = await fetch('http://127.0.0.1:5000/sentiment', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ sentence: e.currentTarget.sentiment.value }),
})
await res.json()
}
export default Sentiment
我收到此錯誤:從源 'http://localhost:3000' 獲取訪問 'http://127.0.0.1:5000/sentiment' 已被 CORS 策略阻止:對預檢請求的回應未通過訪問控制檢查:它沒有 HTTP ok 狀態。
此外,當我提交表單時,我收到“OPTIONS /sentiment HTTP/1.1” 404 - 而不是 POST
關于我做錯了什么的任何想法?
uj5u.com熱心網友回復:
嘗試像這樣設定建構式
app = Flask(__name__)
cors = CORS(app, resources={r"/*": {"origins": "*"}})
如果這不起作用,請嘗試添加 cross_origin 裝飾器
from flask_cors import CORS,cross_origin
@app.route('/predict', methods=['POST'])
@cross_origin()
def predict():
if request.method == 'POST':
data = request.get_json()
sentence = data['sentence']
vectoriser, LRmodel = load_models()
if vectoriser and LRmodel:
vector = vectoriser.transform([sentence])
prediction = LRmodel.predict(vector)
# return jsonify({'prediction': str(prediction[0])})
if prediction[0] == 1:
res = jsonify({'prediction': 'Positive'})
res.headers.add("Access-Control-Allow-Origin", "*")
return res
else :
res = jsonify({'prediction': 'Positive'})
res.headers.add("Access-Control-Allow-Origin", "*")
return res
else:
return jsonify("Error")
return 'Error'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/343841.html
上一篇:如何使模態視窗在小型設備上滾動
