Mengarahkan kembali ke URL dalam Flask

227

Saya baru mengenal Python dan Flask dan saya mencoba untuk melakukan hal yang sama Response.redirectseperti pada C # - yaitu: redirect ke URL tertentu - bagaimana cara melakukannya?

Ini kode saya:

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
sumber

Jawaban:

365

Anda harus mengembalikan arahan:

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)

Lihat dokumentasi pada flask docs. Nilai default untuk kode adalah 302 sehingga code=302dapat dihilangkan atau diganti dengan kode pengalihan lainnya (satu dalam 301, 302, 303, 305, dan 307).

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

Lihatlah contoh dalam dokumentasi .

permukaan muka
sumber
2
perhatikan bahwa Anda memberikan nama fungsi url_foryang kemudian membangun URL yang diteruskan untuk mengarahkan dan Anda mengembalikannya.
Sunvic
40

Dari Dokumentasi Flask API (v. 0.10):

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

Mengembalikan objek respons (aplikasi WSGI) yang, jika dipanggil, mengarahkan klien ke lokasi target. Kode yang didukung adalah 301, 302, 303, 305, dan 307. 300 tidak didukung karena itu bukan pengalihan nyata dan 304 karena itu adalah jawaban untuk permintaan dengan permintaan dengan header If-Modified-Sejak yang ditentukan.

Baru di versi 0.6 : Lokasi sekarang dapat berupa string unicode yang disandikan menggunakan fungsi iri_to_uri ().

Parameter:

  • location - lokasi tanggapan harus diarahkan.
  • code- kode status pengalihan. default ke 302.
  • Response(kelas) - kelas respons untuk digunakan saat instantiating respons. Standarnya adalah werkzeug.wrappers.Response jika tidak ditentukan.
mengarungi
sumber
13

Saya percaya bahwa pertanyaan ini layak diperbarui: lihat saja pendekatan lain dan lakukan perbandingan.

Inilah cara Anda melakukan pengalihan (3xx) dari satu url ke yang lain di 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)

Untuk referensi resmi lainnya, di sini .

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

Documents dapat ditemukan di sini .

der_fenix
sumber
5

Flask mencakup redirectfungsi untuk mengarahkan ulang ke url apa pun. Lebih lanjut, Anda dapat membatalkan permintaan lebih awal dengan kode kesalahan dengan 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)

Secara default, halaman kesalahan hitam dan putih ditampilkan untuk setiap kode kesalahan.

The redirectMetode mengambil secara default kode 302. Sebuah daftar untuk http kode status di sini .

yoelvis
sumber
1

Untuk ini, Anda cukup menggunakan redirectfungsi yang disertakanflask

from flask import Flask, redirect

app = Flask(__name__)

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

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

Tip berguna lainnya (karena Anda baru menggunakan flask), adalah menambahkan app.debug = Truesetelah menginisialisasi objek flask karena output debugger sangat membantu sambil mencari tahu apa yang salah.

Manan Gouhari
sumber
1

Anda bisa menggunakan seperti ini:

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)

Berikut ini tautan yang dirujuk ke kode ini.

RAJAHMAD MULANI
sumber