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)

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


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 .


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.

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 .



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 .


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.


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.