FlaskのURLへのリダイレクト


227

私はPythonとFlaskを初めて使用Response.redirectし、C#と同じように実行しようとしています。つまり、特定のURLにリダイレクトします。どうすればよいですか。

これが私のコードです:

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello World!'

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

回答:


365

リダイレクトを返す必要があります:

import os
from flask import Flask,redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect("http://www.example.com", code=302)

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

フラスコのドキュメントに関するドキュメントを参照してくださいコードのデフォルト値は302なのでcode=302、省略したり、他のリダイレクトコード(301、302、303、305、307に1つ)に置き換えたりできます。


95
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from flask import Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect(url_for('foo'))

@app.route('/foo')
def foo():
    return 'Hello Foo!'

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

ドキュメント例をご覧ください。


2
関数名をurl_for渡していて、リダイレクトに渡されるURLを作成し、それを返すことに注意してください。
Sunvic

40

フラスコのAPIドキュメント(V 0.10。):

フラスコ。リダイレクトlocationcode=302Response=None

呼び出された場合にクライアントをターゲットの場所にリダイレクトする応答オブジェクト(WSGIアプリケーション)を返します。サポートされるコードは、301、302、303、305、および307です。300は、実際のリダイレクトではないためサポートされていません。304は、定義済みのIf-Modified-Sinceヘッダーを含むリクエストに対するリクエストの回答であるためです。

バージョン0.6の新機能:ロケーションは、iri_to_uri()関数を使用してエンコードされたUnicode文字列にすることができます。

パラメーター:

  • location –応答のリダイレクト先の場所。
  • code–リダイレクトステータスコード。デフォルトは302です。
  • Response(クラス)–応答をインスタンス化するときに使用する応答クラス。指定しない場合、デフォルトはwerkzeug.wrappers.Responseです。

13

この質問は更新するに値すると思います。他のアプローチを見て比較してください。

Flask(0.12.2)で、あるURLから別のURLにリダイレクト(3xx)する方法は次のとおりです。

#!/usr/bin/env python

from flask import Flask, redirect

app = Flask(__name__)

@app.route("/")
def index():
    return redirect('/you_were_redirected')

@app.route("/you_were_redirected")
def redirected():
    return "You were redirected. Congrats :)!"

if __name__ == "__main__":
    app.run(host="0.0.0.0",port=8000,debug=True)

その他の公式リファレンスについては、こちらをご覧ください



5

Flaskには、redirect任意のURLにリダイレクトするための関数が含まれています。さらに、次のエラーコードを使用して、リクエストを早期に中止できますabort

from flask import abort, Flask, redirect, url_for

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect(url_for('hello'))

@app.route('/hello'):
def world:
    abort(401)

デフォルトでは、エラーコードごとに白黒のエラーページが表示されます。

このredirectメソッドは、デフォルトでコード302を取得します。httpステータスコードのリストはこちらです。


1

これにredirectは、に含まれている関数を使用するだけですflask

from flask import Flask, redirect

app = Flask(__name__)

@app.route('/')
def hello():
    return redirect("www.exampleURL.com", code = 302)

if __name__ == "__main__":
    app.run()

もう1つの便利なヒント(フラスコに慣れていない場合)はapp.debug = True、フラスコオブジェクトを初期化した後に追加することです。デバッガーの出力が何が問題かを理解する際に役立ちます。


1

次のように使用できます:

import os
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
     # Redirect from here, replace your custom site url "www.google.com"
    return redirect("www.google.com", code=200)

if __name__ == '__main__':
    # Bind to PORT if defined, otherwise default to 5000.
    port = int(os.environ.get('PORT', 5000))
    app.run(host='0.0.0.0', port=port)

このコードへの参照リンクは次のとおりです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.