2013-01-15 1 views
105

Sono nuovo a Python e Flask e sto cercando di fare l'equivalente di Response.redirect come in C# - ad esempio: reindirizzare a un URL specifico - come faccio a fare questo?Reindirizzamento all'URL nel pallone

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) 

risposta

172

si deve tornare un redirect

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 the documentation on flask docs.

valore predefinito di codice è 302 così code=302 può essere omesso o sostituito da un altro codice di reindirizzamento (uno in 301, 302, 303, 305, e 307)

31

Dal Flask API Documentation (v 0.10.):

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

restituisce un oggetto Response (un'applicazione WSGI) che, se chiamato, reindirizza il client al percorso 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 per una richiesta con una richiesta con intestazioni definite If-Modified-Since.

Nuovo nella versione 0.6: La posizione può ora essere una stringa unicode che è codificato usando la funzione() iri_to_uri.

Parametri:

  • location - la posizione della risposta dovrebbe reindirizzare.
  • code - il codice di stato di reindirizzamento. il valore predefinito è 302.
  • Response (classe) - una classe di risposta da utilizzare durante l'istanziazione di una risposta. Il valore predefinito è werkzeug.wrappers.Response se non specificato.
1
flask.redirect(location, code=302) 

Docs possono essere trovati here.

49
#!/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 cerca nella example in the documentation.

+0

nota che stai passando il nome della funzione in "url_for'', che quindi crea un URL che viene passato al reindirizzamento e lo restituisci. – Sunvic

1

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

Ecco come si fa il reindirizzamento (3xx) da un URL a un altro a 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, here.