Redireccionando a URL en Frasco

227

Soy nuevo en Python y Flask y estoy tratando de hacer el equivalente de Response.redirectC #, es decir: redirigir a una URL específica, ¿cómo hago para solucionar 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)
iJade
fuente

Respuestas:

365

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 sobre documentos del matraz. El valor predeterminado para el código es 302, por lo que code=302puede omitirse o reemplazarse por otro código de redireccionamiento (uno en 301, 302, 303, 305 y 307).

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

Eche un vistazo al ejemplo en la documentación .

cara oscura
fuente
2
tenga en cuenta que está pasando el nombre de la función en el url_forque luego construye una URL que se pasa para redirigir y lo devuelve.
Sunvic
40

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

matraz. redirect ( location, code=302, Response=None)

Devuelve un objeto de respuesta (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 a una solicitud con una solicitud con encabezados If-Modified-Since definidos.

Nuevo en la versión 0.6 : la ubicación ahora puede ser una cadena Unicode que se codifica utilizando la función iri_to_uri ().

Parámetros:

  • location - la ubicación a la que debe redirigir la respuesta.
  • code- el código de estado de redireccionamiento. el valor predeterminado es 302.
  • Response(clase): una clase de respuesta para usar al crear instancias de una respuesta. El valor predeterminado es werkzeug.wrappers.Response si no se especifica.
vado
fuente
13

Creo que esta pregunta merece una actualización: solo eche un vistazo a los otros enfoques y haga las comparaciones.

Así es como se realiza 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í .

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

Los documentos se pueden encontrar aquí .

der_fenix
fuente
5

Frasco incluye la redirectfunción para redirigir a cualquier url. Además, puede cancelar una solicitud antes con un código de error con 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)

Por defecto, se muestra una página de error en blanco y negro para cada código de error.

El redirectmétodo toma por defecto el código 302. Una lista de códigos de estado http aquí .

yoelvis
fuente
1

Puedes usar así:

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("https://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)

Aquí está el enlace referenciado a este código.

RAJAHMAD MULANI
fuente
1

Para esto, simplemente puede usar la redirectfunción que se incluye enflask

from flask import Flask, redirect

app = Flask(__name__)

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

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

Otro consejo útil (como nuevo en el matraz) es agregar app.debug = Truedespués de inicializar el objeto del matraz, ya que la salida del depurador ayuda mucho mientras se da cuenta de lo que está mal.

Manan Gouhari
fuente