Flask 使用参数重定向到外部 URL

Flask Redirect to External URL With Parameters

我想使用 flask 将用户重定向到带参数的外部 URL。我最近遇到 this post about redirect and url_for which only works for internal URLs, and this post that had a similar question about external URLs with parameters,但我无法将 HTTP 代码 307 用于我正在处理的 LTI 产品。后面的解决方案post也没有包含如何传递参数。

我知道 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 字符串?提前谢谢大家。

经过@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完美解决了这个问题