Flask と Python での POST リクエストの問題の解決
<p>CLIENT を追加するための Flask POST リクエスト ハンドラーを作成しています。 </p>
<pre class="brush:php;toolbar:false;">app = Flask(__name__)
CORS(アプリ)
@app.post("/api/clients/")
def addClient():
data = open('./src/clients.json', 'w ')
クライアント = json.load(データ)
req = json.loads(リクエスト.データ)
client.append(req)
json.dump(クライアント, データ)
data.close()
return req</pre>
<p>しかし、この Javascript の <code>fetch()</code> API をブラウザで実行すると、次のようになります。
<pre class="brush:php;toolbar:false;">let u = "http://url/api/clients/n1/"
b = { とします
"クライアント": "n1"、
「詳細」: {
"アドレス 1": "行 1"、
"アドレス 2": "行 2"、
"都市": "都市",
「メール」: 「@」、
"gst": "gstno"
}
}
const addStudent = async (us, c) => {
const 応答 = await fetch(us, {
メソッド: "POST"、
ヘッダー: {
"Content-Type": "application/json"、
}、
本体:c、
});
const data = 応答を待ちます.json();
コンソール.ログ(データ);
};
addStudent(u, b);
<p>ブラウザのコンソールに次のエラーが表示されます: </p>
<ブロック引用>
<p> オリジン「null」に「Access-Control-Allow-Origin」ヘッダーがないため、「url/api/clients/」へのアクセス取得はブロックされます。不透明な応答がニーズを満たす場合は、要求のモードを「no-cors」に設定して、CORS によるリソースの取得を無効にします。</p>
</blockquote>
<p>参考までに、Flask コマンド ラインで言及されているエラーを以下に示します。</p>
<ブロック引用>
<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>Call</strong>
return self.wsgi_app(environment, start_response)
ファイル「E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py」、wsgi_app の 2531 行目
応答 = self.handle_Exception(e)
ファイル「E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask_cors\extension.py」、行 165、wrap_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」、wsgi_app の 2528 行目
応答 = self.full_dispatch_request()
ファイル「E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask\app.py」、full_dispatch_request の 1825 行目
rv = self.handle_user_Exception(e)
ファイル「E:\All_Codes\WEB_DEV\excel-o-meter\venv\lib\site-packages\flask_cors\extension.py」、行 165、wrap_function
Return cors_after_request(app.make_response(f(*args, **kwargs)))</p>
</blockquote>
<p><strong>上記のように特定のヘッダーを追加する必要がありますか、それとも Flask 側にバグがあるのでしょうか? </strong>
コマンドラインの最後の行では CORS エラーが発生しているようです。 </p>