[解決済み] Flaskでレスポンスヘッダを設定するには?
質問
これは私のコードです。
@app.route('/hello', methods=["POST"])
def hello():
resp = make_response(render_template('hello.html'))
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
しかし、ブラウザからサーバーにリクエストをすると、このようなエラーが発生します。
XMLHttpRequest cannot load http://localhost:5000/hello.
No 'Access-Control-Allow-Origin' header is present on the requested resource.
私はまた、リクエストの後にレスポンスヘッダを設定する、この方法を試しました"after"。
@app.after_request
def add_header(response):
response.headers['Access-Control-Allow-Origin'] = '*'
return response
ダメでした。同じエラーが出ます。ルート関数で応答ヘッダを設定する方法はありますか?このようなものがあれば理想的です。
@app.route('/hello', methods=["POST"])
def hello(response): # is this a thing??
response.headers['Access-Control-Allow-Origin'] = '*'
return response
というような感じなのですが、どうしたらいいのかわかりません。助けてください。
EDIT
のようにPOSTリクエストでurlをcurlすると。
curl -iX POST http://localhost:5000/hello
こんな反応が返ってきます。
HTTP/1.0 500 INTERNAL SERVER ERROR
Content-Type: text/html
Content-Length: 291
Server: Werkzeug/0.9.6 Python/2.7.6
Date: Tue, 16 Sep 2014 03:58:42 GMT
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p>
何かアイデアはありますか?
どのように解決するのですか?
かなり簡単にできますよ。
@app.route("/")
def home():
resp = flask.Response("Foo bar baz")
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
見てください flask.Response と flask.make_response()
しかし、何か別の問題があるような気がします。
after_request
も正しく処理されているはずだからです。
EDIT
今気づいたのですが、あなたはすでに
make_response
を使用していることに気づきましたが、これは方法の1つです。 私が前に言ったように
after_request
も同様に機能するはずです。 curlでエンドポイントを叩いてみて、ヘッダがどうなっているか見てみてください。
curl -i http://127.0.0.1:5000/your/endpoint
と表示されるはずです。
> curl -i 'http://127.0.0.1:5000/'
HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 11
Access-Control-Allow-Origin: *
Server: Werkzeug/0.8.3 Python/2.7.5
Date: Tue, 16 Sep 2014 03:47:13 GMT
Access-Control-Allow-Originヘッダに注目。
EDIT 2
やはり、500が出るということは、思ったようにヘッダーが設定されていないのでしょう。 試しに
app.debug = True
を追加して、もう一度試してみてください。 問題の根本的な原因を示す何らかの出力が得られるはずです。
たとえば
@app.route("/")
def home():
resp = flask.Response("Foo bar baz")
user.weapon = boomerang
resp.headers['Access-Control-Allow-Origin'] = '*'
return resp
きれいにフォーマットされたhtmlのエラーページを表示し、一番下に次のように表示します(curlコマンドに便利です)。
Traceback (most recent call last):
...
File "/private/tmp/min.py", line 8, in home
user.weapon = boomerang
NameError: global name 'boomerang' is not defined
関連
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] リストが空かどうかを確認するにはどうすればよいですか?
-
[解決済み] Flaskのリクエストで受信したデータを取得する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python関数の高度な応用を解説
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
任意波形を生成してtxtで保存するためのPython実装
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】なぜ「LinAlgError: Grangercausalitytestsから「Singular matrix」と表示されるのはなぜですか?
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】ValueError: xとyは同じサイズでなければならない