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)
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).
#!/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 .
À 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é.
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 .
flask.redirect(location, code=302)
Les documents peuvent être trouvés ici .
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.
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 .