web-dev-qa-db-ja.com

フラスコ内のURLへのリダイレクト

私はPythonとFlaskに不慣れで、C#のようにResponse.redirectと同等のことをやろうとしています。

これが私のコードです:

import os
from flask import Flask

app = Flask(__name__)

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

if __== '__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)
169
iJade

あなたはリダイレクトを返さなければなりません:

import os
from flask import Flask,redirect

app = Flask(__name__)

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

if __== '__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)

flask docsのドキュメントを参照してください。 codeのデフォルト値は302なので、code=302を省略するか、他のリダイレクトコードに置き換えることができます(301、302、 303、305、および307)。

271
Xavier Combelle
#!/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 __== '__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)

ドキュメントの の例を見てください

75
soerface

Flask APIドキュメント (v。0.10)より:

flask。リダイレクトlocationcode=302Response=None

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

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

パラメーター:

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

私はこの質問が最新のものに値すると信じています:ただ他のアプローチを見て、比較をしてください。

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 __== "__main__":
    app.run(Host="0.0.0.0",port=8000,debug=True)

その他の公式な参考文献については、 こちら

11
ivanleoncz
flask.redirect(location, code=302)

ドキュメントはこちら にあります

4
der_fenix

これには、redirectに含まれているflask関数を単に使用することができます。

from flask import Flask, redirect

app = Flask(__name__)

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

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

もう1つの便利なヒント(flaskに慣れていない場合)は、デバッガの出力が何が問題なのかを突き止めながら役立つので、flaskオブジェクトを初期化した後にapp.debug = Trueを追加することです。

0
Manan Gouhari

Flaskには、任意のURLにリダイレクトするためのredirect関数が含まれています。さらに、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ステータスコードのリスト はこちら

0
yoelvis