Flask'ta URL'ye yönlendirme


228

Python ve Flask'da yeniyim ve eşdeğerini yapmaya çalışıyorum Response.redirect ve C # gibi - yani: belirli bir URL'ye yönlendirme - nasıl bu konuda giderim?

İşte benim kod:

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)

Yanıtlar:


365

Bir yönlendirmeyi geri göndermeniz gerekir:

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)

Şişe belgeleri hakkındaki belgelere bakın . Kod için varsayılan değer 302'dir, bu nedenle code=302başka yönlendirme koduyla (301, 302, 303, 305 ve 307'de bir tane) atlanabilir veya değiştirilebilir.


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)

Belgelerdeki örneğe bir göz atın .


2
içine url_fordaha sonra yeniden yönlendirmeye geçirilen bir URL oluşturan işlev adını ilettiğinizi ve bunu döndürdüğünüzü unutmayın.
Sunvic

40

Kaynaktan Flask API Documentation (v 0.10.):

şişe. yönlendirme ( location, code=302, Response=None)

Çağrıldığında istemciyi hedef konuma yönlendiren bir yanıt nesnesi (WSGI uygulaması) döndürür. Desteklenen kodlar 301, 302, 303, 305 ve 307'dir. 300 desteklenmez, çünkü gerçek bir yönlendirme değildir ve 304 çünkü tanımlanmış If-Modified-Since başlıklarına sahip bir istekle bir isteğin yanıtıdır.

0.6 sürümündeki yenilikler: Konum, iri_to_uri () işlevi kullanılarak kodlanmış bir unicode dize olabilir.

Parametreler:

  • location - yanıtın yönlendirmesi gereken konum.
  • code- yönlendirme durum kodu. varsayılan değer 302'dir.
  • Response(class) - bir yanıtı başlatırken kullanılacak bir Response sınıfı. Belirtilmemişse varsayılan değer werkzeug.wrappers.Response'dir.

13

Bu sorunun güncellenmeyi hak ettiğine inanıyorum: sadece diğer yaklaşımlara bir göz atın ve karşılaştırmaları yapın.

Flask'ta (0.12.2) bir url'den diğerine yeniden yönlendirme (3xx) nasıl yapılır:

#!/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)

Diğer resmi referanslar için burada .


6

Flask, redirectherhangi bir url'ye yönlendirme işlevi içerir . Ayrıca, isteği bir hata kodu ile erkenden iptal edebilirsiniz 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)

Varsayılan olarak her hata kodu için siyah beyaz bir hata sayfası gösterilir.

redirectYöntem varsayılan olarak http durum kodları için kod 302. listesi alır burada .



1

Bunun gibi kullanabilirsiniz:

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)

İşte bu kodun referans verilen bağlantısı.


1

Bunun için redirect, içinde yer alan işlevi kullanabilirsiniz .flask

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()

Başka bir yararlı ipucu (şişeye yeni app.debug = Truebaşladığınızda), hata ayıklayıcı çıktısı neyin yanlış olduğunu anlamaya yardımcı olurken, şişe nesnesini başlattıktan sonra eklemektir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.