Подтвердить что ты не робот

Перенаправление на URL-адрес в колбе

Я новичок в Python и Flask, и я пытаюсь сделать эквивалент Response.redirect как в С# - то есть: перенаправить на определенный 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)
4b9b3361

Ответ 1

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

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

Ответ 2

#!/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)

Взгляните на пример в документации.

Ответ 3

Из документации 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, если не указано.

Ответ 4

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

Вот как вы делаете перенаправление (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)

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

Ответ 5

flask.redirect(location, code=302)

Документы можно найти здесь.

Ответ 6

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

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

Ответ 7

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

Ответ 8

flask.redirect(url_destination, code=302) перенаправляет клиента на url_destination с заданным кодом состояния. Перенаправление на страницу приветствия выглядит следующим образом:

@app.route("/")
def index():
    return redirect('/hello-world')

Для внешнего перенаправления вы должны передать полный URL-адрес, включая http:// в url_destination.

Список кодов состояния для перенаправления можно найти здесь, все они действительны для flask.redirect кроме 300, 304 и 306.