Перенаправление Flask на внешний URL с параметрами

Я хотел бы использовать flask для перенаправления пользователя на внешний URL-адрес с параметрами. Недавно я наткнулся на это сообщение о перенаправлении и url_for, которое работает только для внутренних URL-адресов, и этот пост, в котором был аналогичный вопрос о внешние URL-адреса с параметрами, но я не могу использовать HTTP-код 307 для продукта LTI, над которым я работаю. Решения в последнем сообщении также не включали способы передачи параметров.

Я знаю, что url_for принимает аргументы, но я не могу использовать их для внешнего URL.

Я хотел бы что-то похожее на это:

return redirect(f'{redirect_url}?lti_msg={message}&lti_log={log}')

куда

redirect_url = 'https://www.example.com' # external url
lti_msg = 'An example message' # parameter
lti_log = 'An example log message' # parameter

Есть ли способ передать параметры URL в качестве аргументов вместо использования f-строк? Спасибо всем заранее.


person Parzival    schedule 30.04.2021    source источник
comment
Не точная копия, но см. этот вопрос   -  person Selcuk    schedule 30.04.2021


Ответы (1)


После некоторых исследований и рекомендаций @Selcuk я смог реализовать его, используя urllib.parse.urlencode

Импорт:

from urllib.parse import urlencode

Применение:

redirect_baseUrl = 'https://www.example.com' # external url
lti_msg = 'An example message' # parameter
lti_log = 'An example log message' # parameter

parameters = dict(lti_msg=message, lti_log=log)
redirect_url = redirect_baseUrl + ("?" + urlencode(parameters) if parameters else "")
return redirect(redirect_url)

Примечание: использование формата, который я использовал в вопросе, приведет к передаче неполных данных, когда в одном из параметров присутствуют специальные символы, такие как &. urlencode прекрасно решает эту проблему

person Parzival    schedule 30.04.2021