У меня есть экземпляр приложения flask, работающий на порту 80, и другой экземпляр того же приложения на порту 8080. Я хочу, чтобы все пользователи использовали порт 80 для всех URL-адресов, кроме одного URL-адреса с именем /parallel_url
. Поэтому, когда они посещают https://server:80/parallel_url
, он перенаправляется на https://server:8080/parallel_url
. Я также не хочу, чтобы пользователи могли посещать любые другие URL-адреса (кроме /parallel_url
) через порт 8080, и я хочу, чтобы они были перенаправлены на сообщение 80, поэтому, если они посещают https://server:8080/*
, его необходимо перенаправить на https://server:80/*
Я планирую написать декоратор, который видит, является ли текущий URL чем-то другим, кроме /parallel_url
, и перенаправляет его на 80. Поэтому, если пользователь посещает это через порт 8080, ему нужно перенаправиться на 80
def parallel_redirect(func):
@functools.wraps(func)
def wrapper():
"""
What to do here to redirect to 80
"""
if request.url_rule == "/parallel_url":
value = func()
return value
return wrapper
@mod.route('/parallel_url')
@parallel_redirect
@login_required
def parallel_url():
template = tpl_env.get_template('my_index.html')
x = "some data from db"
y = "some other data from db"
return template.render(x=x,y=y)
обновление: я нашел переменную, которая сообщает мне, на каком порту я нахожусь. пожалуйста, обратитесь к коду ниже
def parallel_redirect(func):
@functools.wraps(func)
def wrapper():
if os.environ.curr_port == 8080:
if request.url_rule != "/parallel_url":
# code to redirect to "https://server:80/"+request.url_rule
elif os.environ.curr_port == 80:
if request.url_rule == "/parallel_url":
# code to redirect to "https://server:8080/"+request.url_rule
else:
value = func()
return value
return wrapper
@mod.route('/parallel_url')
@parallel_redirect
@login_required
def parallel_url():
template = tpl_env.get_template('my_index.html')
x = "some data from db"
y = "some other data from db"
return template.render(x=x,y=y)