Redireccionando a URL en Flask


Soy nuevo en Python y Flask y estoy tratando de hacer el equivalente de Response.redirect como en C# - ie: redirigir a una URL específica - ¿cómo puedo hacer esto?

Aquí está mi código:

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)
Author: mtt2p, 2013-01-15

5 answers

Tienes que devolver una redirección

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)

Consulte [la documentación de flask docs]( http://flask.pocoo.org/docs/1.0/api/#flask.redirect ) el valor predeterminado para el código es 302, por lo que code=302 puede omitirse o reemplazarse por otro código de redirección (uno en 301, 302, 303, 305 y 307)

 217
Author: Xavier Combelle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-07 20:52:04
#!/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)

Eche un vistazo al ejemplo en la documentación.

 64
Author: soerface,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-15 18:05:21

De la Documentación de la API Flask (v. 0.10):

Matraz.redirigir(location, code=302, Response=None)

Devuelve un objeto response (una aplicación WSGI) que, si se llama, redirige al cliente a la ubicación de destino. Los códigos admitidos son 301, 302, 303, 305 y 307. 300 no es compatible porque no es una redirección real y 304 porque es la respuesta para una solicitud con una solicitud con cabeceras If-Modified-Since definidas.

Nuevo en versión 0.6: La ubicación ahora puede ser una cadena unicode que es codificado usando la función iri_to_uri ().

Parámetros:

  • location – la ubicación a la que debe redirigirse la respuesta.
  • code – el código de estado de redirección. por defecto 302.
  • Response (class) - una clase de respuesta que se usa al instanciar una respuesta. El valor predeterminado es werkzeug.envoltura.Respuesta si no se especifica.
 34
Author: ford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-10 15:52:23

Creo que esta pregunta merece una actualización: basta con echar un vistazo a los otros enfoques y hacer las comparaciones.

Aquí es cómo hacer la redirección (3xx) de una url a otra en 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 __name__ == "__main__":
    app.run(host="0.0.0.0",port=8000,debug=True)

Para otras referencias oficiales, aquí .

 6
Author: ivanleoncz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-23 02:55:57
flask.redirect(location, code=302)

Los documentos se pueden encontrar aquí.

 1
Author: der_fenix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-19 20:48:06