Перенаправление на URL в Flask

227

Я новичок в 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)
iJade
источник

Ответы:

365

Вы должны вернуть редирект:

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)

Посмотрите на пример в документации .

soerface
источник
2
обратите внимание, что вы передаете имя функции, в url_forкоторую затем строится URL, который передается для перенаправления, и вы возвращаете это.
Sunvic
40

Из документации API Flask (v. 0.10):

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

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

Новое в версии 0.6 : расположение теперь может быть строкой Юникода, которая кодируется с помощью функции iri_to_uri ().

Параметры:

  • location - место, куда должен быть перенаправлен ответ.
  • code- код состояния перенаправления. по умолчанию 302.
  • Response(класс) - класс Response, используемый при создании экземпляра ответа. По умолчанию используется werkzeug.wrappers.Response, если не указано.
брод
источник
13

Я считаю, что этот вопрос заслуживает обновления: просто взгляните на другие подходы и сравните.

Вот как вы делаете перенаправление (3xx) с одного URL-адреса на другой в 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)

Для других официальных ссылок, здесь .

ivanleoncz
источник
5

Flask включает 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 коды статуса здесь .

yoelvis
источник
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("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)

Вот ссылка на этот код.

Раджахмад Мулани
источник
1

Для этого вы можете просто использовать redirectфункцию, которая включена в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()

Еще один полезный совет (поскольку вы новичок в flask) - добавить app.debug = Trueпосле инициализации объекта flask, поскольку выходные данные отладчика очень помогают, в то же время выясняя, в чем дело.

Манан Гухари
источник