Chuyển hướng đến URL trong Flask


227

Tôi mới sử dụng Python và Flask và tôi đang cố gắng thực hiện tương tự Response.redirectnhư trong C # - tức là: chuyển hướng đến một URL cụ thể - làm thế nào để tôi làm điều này?

Đây là mã của tôi:

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)

Câu trả lời:


365

Bạn phải trả lại một chuyển hướng:

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)

Xem tài liệu về tài liệu bình. Giá trị mặc định cho mã là 302 vì vậy code=302có thể được bỏ qua hoặc thay thế bằng mã chuyển hướng khác (một trong 301, 302, 303, 305 và 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)

Hãy xem ví dụ trong tài liệu .


2
lưu ý rằng bạn đang chuyển tên hàm url_forđể xây dựng một URL được chuyển để chuyển hướng và bạn trả lại tên đó.
Sunvic

40

Từ Tài liệu API Flask (v. 0.10):

bình giữ nhiệt. chuyển hướng ( location, code=302, Response=None)

Trả về một đối tượng phản hồi (một ứng dụng WSGI), nếu được gọi, sẽ chuyển hướng máy khách đến vị trí đích. Các mã được hỗ trợ là 301, 302, 303, 305 và 307. 300 không được hỗ trợ vì đó không phải là chuyển hướng thực sự và 304 vì đó là câu trả lời cho yêu cầu có yêu cầu với các tiêu đề If-Modified-Because được xác định.

Mới trong phiên bản 0.6 : Vị trí hiện có thể là một chuỗi unicode được mã hóa bằng hàm iri_to_uri ().

Thông số:

  • location - vị trí phản hồi sẽ chuyển hướng đến.
  • code- mã trạng thái chuyển hướng. mặc định là 302.
  • Response(lớp) - Lớp Phản hồi sẽ sử dụng khi khởi tạo phản hồi. Mặc định là werkzeug.wrappers.Response nếu không được chỉ định.

13

Tôi tin rằng câu hỏi này xứng đáng được cập nhật: chỉ cần xem qua các phương pháp khác và đưa ra so sánh.

Đây là cách bạn thực hiện chuyển hướng (3xx) từ url này sang url khác trong 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)

Đối với tài liệu tham khảo chính thức khác, ở đây .



5

Flask bao gồm redirectchức năng chuyển hướng đến bất kỳ url nào. Hơn nữa, bạn có thể hủy yêu cầu sớm với mã lỗi với 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)

Theo mặc định, một trang lỗi đen trắng được hiển thị cho mỗi mã lỗi.

Các redirectphương pháp lấy theo mặc định mã 302. Một danh sách cho http tình trạng mã ở đây .


1

Đối với điều này, bạn có thể chỉ cần sử dụng redirectchức năng được bao gồm trongflask

from flask import Flask, redirect

app = Flask(__name__)

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

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

Một mẹo hữu ích khác (như bạn chưa quen với bình), là thêm app.debug = Truesau khi khởi tạo đối tượng bình vì đầu ra của trình gỡ lỗi giúp ích rất nhiều trong khi tìm ra điều gì sai.


1

Bạn có thể sử dụng như thế này:

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)

Đây là liên kết được tham chiếu đến mã này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.