web-dev-qa-db-fra.com

Redirection vers une URL dans Flask

Je suis nouveau dans Python et Flask et j'essaie de faire l'équivalent de Response.redirect comme en C # - c'est-à-dire: rediriger vers une URL spécifique - comment puis-je aller à ce sujet?

Voici mon code:

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

Vous devez retourner une redirection:

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)

Voir la documentation sur flask docs. La valeur par défaut du code est 302, de sorte que code=302 peut être omis ou remplacé par un autre code de redirection (un dans 301, 302, 303). , 305 et 307).

289
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)

Jetez un coup d'oeil au exemple dans la documentation .

80
soerface

À partir de Flask API Documentation (version 0.10):

ballon. redirection (location, code=302, Response=None)

Renvoie un objet de réponse (une application WSGI) qui, s'il est appelé, redirige le client vers l'emplacement cible. Les codes pris en charge sont 301, 302, 303, 305 et 307. 300 n’est pas pris en charge car il ne s’agit pas d’une redirection réelle et 304, car il s’agit de la réponse à une demande avec une demande avec des en-têtes définis If-Modified-Since.

Nouveauté 0.6 : l'emplacement peut maintenant être une chaîne unicode codée à l'aide de la fonction iri_to_uri ().

Paramètres:

  • location - l'emplacement vers lequel la réponse doit être redirigée.
  • code - le code d'état de la redirection. La valeur par défaut est 302.
  • Response (classe) - une classe de réponse à utiliser lors de l'instanciation d'une réponse. La valeur par défaut est werkzeug.wrappers.Response si non spécifié.
38
ford

Je crois que cette question mérite une mise à jour: il suffit de regarder les autres approches et de faire des comparaisons.

Voici comment faire la redirection (3xx) d'une URL à une autre dans Flask (0.12.2):

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

Pour d'autres références officielles, ici .

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

Les documents peuvent être trouvés ici .

4
der_fenix

Pour cela, vous pouvez simplement utiliser la fonction redirect incluse dans flask

from flask import Flask, redirect

app = Flask(__name__)

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

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

Une autre astuce utile (en tant que nouveau venu dans flask), consiste à ajouter app.debug = True après avoir initialisé l'objet flask, car la sortie du débogueur aide beaucoup à déterminer ce qui ne va pas.

0
Manan Gouhari

Le flacon contient la fonction redirect pour la redirection vers n’importe quelle URL. De plus, vous pouvez annuler une demande plus tôt avec un code d'erreur avec 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)

Par défaut, une page d'erreur en noir et blanc est affichée pour chaque code d'erreur.

La méthode redirect prend par défaut le code 302. Une liste des codes de statut http ici .

0
yoelvis