Flask — перенаправление всех маршрутов определенного чертежа на внешний сайт

#python #flask

#python #flask

Вопрос:

у меня есть требование, в соответствии с которым я хочу, чтобы все маршруты определенного плана были перенаправлены на внешнюю веб-страницу.

Для приведенного ниже примера я бы хотел, чтобы «/ Store», «/ Store / home», «/ Store / products» были перенаправлены, скажем, на «google.com «. в реальном сценарии может быть несколько маршрутов, сопоставленных с одним планом, я бы хотел, чтобы другой план «/ Online» не был затронут.

Здесь используется вариант использования, в котором эти модули (маршруты blueprint1) были перемещены в другой домен, и я бы хотел, чтобы пользователи перенаправлялись, если они посещают какой-либо URL-адрес с префиксом ‘Store’

Кто-нибудь знает какую-либо функцию / обходной путь, который можно использовать для достижения этой цели?

 from flask import Flask
from flask import Blueprint

app = Flask(__name__)
blueprint1 = Blueprint('example_blueprint', __name__)
blueprint2 = Blueprint('example_blueprint2', __name__)

@app.route('/')
def index():
    return "this is from root"

@blueprint1.route('/')
def index_b1():
    return "This is default route of blue print1"

@blueprint1.route('/home')
def index_b2():
    return "This is homepage of blue print"

@blueprint1.route('/products')
def index_b3():
    return "This is productpage of blue print"

@blueprint2.route('/')
def index_o1():
    return "This is default route of blue print 2"

app.register_blueprint(blueprint1,url_prefix='/Store')
app.register_blueprint(blueprint2,url_prefix='/Online')

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

Ответ №1:

Используйте after_request (или before_request)

 @blueprint1.after_request
def after_request_func(response):
    return redirect('https://www.pythonkitchen.com')

@blueprint2.after_request
def after_request_func(response):
    return redirect('https://www.pythonkitchen.com')