У меня есть экземпляр приложения фляги, работающий на порту 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)