Перенаправлення на URL на колбі


226

Я новачок у Python та Flask, і я намагаюся зробити еквівалент, Response.redirectяк у C # - тобто: перенаправлення на певну URL - як мені це зробити?

Ось мій код:

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)

Відповіді:


364

Ви повинні повернути переспрямування:

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)

Дивіться документацію про фляш-документи. Значення за замовчуванням для коду - 302, тому code=302його можна опустити або замінити іншим кодом переадресації (один із 301, 302, 303, 305 та 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)

Погляньте на приклад у документації .


2
зауважте, що ви передаєте ім'я функції, в url_forяку потім будуєте URL-адресу, передану для переадресації, і повертаєте її.
Sunvic

40

З документації на Flask API (v. 0.10):

колба. Перенаправлення ( location, code=302, Response=None)

Повертає об’єкт відповіді (додаток WSGI), який, якщо його викликає, перенаправляє клієнта до цільового місця. Підтримувані коди - 301, 302, 303, 305 і 307. 300 не підтримується, оскільки це не реальна переадресація, а 304, тому що це відповідь на запит із запитом із визначеними заголовками If-Modified-Since.

Нове у версії 0.6 : Розташування тепер може бути рядком Unicode, кодованим за допомогою функції iri_to_uri ().

Параметри:

  • location - місце, на яке відповідь має перенаправлятись.
  • code- код статусу переадресації. за замовчуванням до 302.
  • Response(клас) - клас відповіді, який слід використовувати при ініціації відповіді. За замовчуванням - werkzeug.wrappers.Response, якщо не вказано.

13

Я вважаю, що це питання заслуговує на оновлення: просто погляньте на інші підходи та проведіть порівняння.

Ось як ви переспрямовуєте (3xx) з одного URL на інший у колбі (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)

Інші офіційні довідки - тут .



5

Колба включає redirectфункцію переадресації на будь-який URL. Крім того, ви можете скасувати запит на початку з кодом помилки за допомогою 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)

За замовчуванням для кожного коду помилки відображається чорно-біла сторінка помилок.

redirectМетод приймає за замовчуванням список код 302. Для HTTP коди статусу тут .


1

Для цього ви можете просто використовувати redirectфункцію, яка включена вflask

from flask import Flask, redirect

app = Flask(__name__)

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

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

Ще одна корисна порада (як ви новачок у колбі) - це додавання app.debug = Trueпісля ініціалізації об'єкта колби, оскільки вихід налагодження дуже допомагає, з'ясовуючи, що не так.


1

Ви можете використовувати так:

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)

Ось посилання на цей код.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.