Reindirizzamento all'URL in Flask


227

Sono nuovo di Python e Flask e sto provando a fare l'equivalente di Response.redirectcome in C # - ovvero: reindirizzare a un URL specifico - come posso procedere?

Ecco il mio codice:

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)

Risposte:


365

Devi restituire un reindirizzamento:

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)

Vedere la documentazione sui documenti di pallone. Il valore predefinito per il codice è 302, quindi code=302può essere omesso o sostituito da un altro codice di reindirizzamento (uno in 301, 302, 303, 305 e 307).


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)

Dai un'occhiata all'esempio nella documentazione .


2
nota che stai passando il nome della funzione in url_forcui quindi crea un URL che viene passato al reindirizzamento e lo restituisci.
Sunvic,

40

Dalla documentazione API Flask (v. 0.10):

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

Restituisce un oggetto response (un'applicazione WSGI) che, se chiamato, reindirizza il client nella posizione di destinazione. I codici supportati sono 301, 302, 303, 305 e 307. 300 non è supportato perché non è un vero reindirizzamento e 304 perché è la risposta a una richiesta con una richiesta con intestazioni If-Modified-Since definite.

Novità nella versione 0.6 : la posizione può ora essere una stringa unicode codificata utilizzando la funzione iri_to_uri ().

parametri:

  • location - la posizione in cui la risposta dovrebbe reindirizzare.
  • code- il codice di stato di reindirizzamento. il valore predefinito è 302.
  • Response(classe): una classe di risposta da utilizzare durante l'istanza di una risposta. L'impostazione predefinita è werkzeug.wrappers.Response se non specificato.

13

Credo che questa domanda meriti un aggiornamento: basta dare un'occhiata agli altri approcci e fare i confronti.

Ecco come eseguire il reindirizzamento (3xx) da un URL all'altro in 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)

Per altri riferimenti ufficiali, qui .



5

Flask include la redirectfunzione per il reindirizzamento a qualsiasi URL. Inoltre, è possibile interrompere anticipatamente una richiesta con un codice di errore 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)

Per impostazione predefinita, viene visualizzata una pagina di errore in bianco e nero per ciascun codice di errore.

Il redirectmetodo prende di default il codice 302. Un elenco per i codici di stato http qui .


1

Per questo puoi semplicemente usare la redirectfunzione inclusa inflask

from flask import Flask, redirect

app = Flask(__name__)

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

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

Un altro suggerimento utile (dato che sei nuovo nel pallone), è quello di aggiungere app.debug = Truedopo l'inizializzazione dell'oggetto pallone poiché l'output del debugger aiuta molto nel capire cosa c'è che non va.


1

Puoi usare così:

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)

Ecco il link di riferimento a questo codice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.