2013-01-15 11 views
105

Ich bin neu in Python und Flask und ich versuche, das Äquivalent von Response.redirect wie in C# zu tun - dh: Redirect auf eine bestimmte URL - wie gehe ich darüber?Umleiten zu URL in Flask

Hier ist mein Code:

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) 

Antwort

172

Sie haben eine Umleitung zurück

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) 

the documentation on flask docs sehen.

Standardwert für Code 302 so code=302 kann von anderen Weiterleitungscode (eine in 301, 302, 303, 305 und 307)

31

Vom Flask API Documentation (v 0.10.):

Kolben. umlenken (location, code=302, Response=None)

ein Antwort-Objekt zurück (a WSGI Anwendung), die, wenn genannt, leitet den Client an den Zielort. Unterstützte Codes sind 301, 302, 303, 305 und 307. 300 wird nicht unterstützt, da es keine echte Weiterleitung und 304 ist, weil es die Antwort für eine Anfrage mit einer Anfrage mit definierten If-Modified-Since-Headern ist.

Neu in der Version 0.6: Der Standort kann nun ein Unicode-String sein, mit dem iri_to_uri() Funktion codiert ist.

Parameter:

  • location - die Lage der Antwort umleiten soll.
  • code - der Umleitungsstatuscode. Standardwert ist 302.
  • Response (Klasse) - eine Antwortklasse, die beim Instanziieren einer Antwort verwendet werden soll. Der Standardwert ist werkzeug.wrappers.Response, wenn nicht angegeben.
1
flask.redirect(location, code=302) 

Docs können here finden.

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) 

Werfen Sie einen Blick auf die example in the documentation weggelassen oder ersetzt werden.

+0

Beachten Sie, dass Sie den Funktionsnamen in '' url_for'' übergeben, der dann eine URL erstellt, die an redirect übergeben wird und Sie diese zurückgeben. – Sunvic

1

Ich glaube, dass diese Frage eine aktualisierte verdient: werfen Sie einfach einen Blick auf die anderen Ansätze und machen Sie die Vergleiche.

Hier ist, wie Sie die Umleitung zu tun (3xx) von einer URL zum anderen 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) 

Für andere offizielle Referenzen, here.