Umleitung zur URL in Flask

227

Ich bin neu in Python und Flask und versuche, das Gleiche Response.redirectwie in C # zu tun - dh: zu einer bestimmten URL umleiten - wie gehe ich vor?

Hier ist mein Code:

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)
iJade
quelle

Antworten:

365

Sie müssen eine Weiterleitung zurückgeben:

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)

Siehe die Dokumentation zu den Kolbendokumenten. Der Standardwert für Code ist 302, code=302kann also weggelassen oder durch einen anderen Umleitungscode ersetzt werden (einer in 301, 302, 303, 305 und 307).

Xavier Combelle
quelle
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)

Schauen Sie sich das Beispiel in der Dokumentation an .

Soerface
quelle
2
Beachten Sie, dass Sie den Funktionsnamen übergeben, in url_forden dann eine URL erstellt wird, die an die Umleitung übergeben wird, und diese zurückgeben.
Sunvic
40

Aus der Flask API-Dokumentation (Version 0.10):

Flasche. Redirect ( location, code=302, Response=None)

Gibt ein Antwortobjekt (eine WSGI-Anwendung) zurück, das den Client beim Aufruf an den Zielspeicherort umleitet. Unterstützte Codes sind 301, 302, 303, 305 und 307. 300 wird nicht unterstützt, da es sich nicht um eine echte Weiterleitung handelt, und 304, weil es die Antwort auf eine Anfrage mit einer Anfrage mit definierten If-Modified-Since-Headern ist.

Neu in Version 0.6 : Der Speicherort kann jetzt eine Unicode-Zeichenfolge sein, die mit der Funktion iri_to_uri () codiert wird.

Parameter:

  • location - den Ort, an den die Antwort umgeleitet werden soll.
  • code- den Weiterleitungsstatuscode. Der Standardwert ist 302.
  • Response(Klasse) - Eine Antwortklasse, die beim Instanziieren einer Antwort verwendet wird. Der Standardwert ist werkzeug.wrappers.Response falls nicht angegeben.
Ford
quelle
13

Ich glaube, dass diese Frage eine Aktualisierung verdient: Schauen Sie sich einfach die anderen Ansätze an und führen Sie die Vergleiche durch.

So leiten Sie in Flask (0.12.2) die Umleitung (3xx) von einer URL zur anderen durch:

#!/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)

Weitere offizielle Referenzen finden Sie hier .

ivanleoncz
quelle
5
flask.redirect(location, code=302)

Dokumente finden Sie hier .

der_fenix
quelle
5

Flask enthält die redirectFunktion zum Umleiten zu einer beliebigen URL. Darüber hinaus können Sie eine Anfrage mit einem Fehlercode vorzeitig abbrechen mit 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)

Standardmäßig wird für jeden Fehlercode eine Schwarzweiß-Fehlerseite angezeigt.

Die redirectMethode verwendet standardmäßig den Code 302. Eine Liste für http-Statuscodes hier .

Yoelvis
quelle
1

Hierfür können Sie einfach die in enthaltene redirectFunktion verwendenflask

from flask import Flask, redirect

app = Flask(__name__)

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

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

Ein weiterer nützlicher Tipp (da Sie neu in Flask sind) ist das Hinzufügen app.debug = Truenach dem Initialisieren des Flask-Objekts, da die Debugger-Ausgabe viel hilft, um herauszufinden, was falsch ist.

Manan Gouhari
quelle
1

Sie können wie folgt verwenden:

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)

Hier ist der Link zu diesem Code.

RAJAHMAD MULANI
quelle