Я знаю о функции Flask redirect(<URL>), которую я могу использовать внутри маршрутов.
Но у меня есть десятки URL-адресов, которые мне нужно перенаправить на другой сайт. Мне было интересно, есть ли способ реализовать перенаправления без написания нескольких операторов redirect(<URL>) во многих схемах и маршрутах.
Мне было интересно, могу ли я просто предоставить Flask свои данные сопоставления перенаправления в большом количестве. например
www.example.com/example-1 => subdomain.example.com/example-1
www.example.com/example-2 => subdomain.example.com/example-2
www.example.com/example-3 => subdomain.example.com/example-3
Да, вы можете делать перенаправления со словарями или списком кортежей для их хранения.
Например:
from flask import Flask, redirect
app = Flask(__name__)
# Define a dictionary of redirect mappings
redirects = {
"/example-1": "http://subdomain.example.com/example-1",
"/example-2": "http://subdomain.example.com/example-2",
"/example-3": "http://subdomain.example.com/example-3"
}
# Register a route to handle all the redirects
@app.route('/<path:path>')
def redirect_to_new_url(path):
if path in redirects:
new_url = redirects[path]
return redirect(new_url, code=302)
else:
return "Page not found", 404
if __name__ == '__main__':
app.run(debug=True)
Cheesecake87 из Reddit предоставил это решение, которое я отмечу как принятый ответ.
from flask import request
@app.before_request
def before_request():
redir = (
('https://www.example.com/example-1', 'https://subdomain.example.com/example-1'),
('https://www.example.com/example-2', 'https://subdomain.example.com/example-2')
)
for v in redir:
if request.url in v[0]:
return redirect(v[1], code=302)
Источник 2: https://stackoverflow.com/a/16121323
Hack-R решение было хорошим. Но правило URL-адреса перенаправления было отсортировано так, чтобы находиться в самом низу списка правил URL-адресов (по Werkzeug), поэтому перенаправление не происходило, пока я не удалил исходные маршруты, которые я хотел перенаправить.
С помощью этого решения URL-адреса оцениваются ДО того, как они попадут в список правил URL-адресов.