首页 > 解决方案 > Flask 使用参数重定向到外部 URL

问题描述

我想使用烧瓶将用户重定向到带有参数的外部 URL。我最近遇到了这篇关于 redirect 和 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 字符串?谢谢大家。

标签: pythonflaskredirectlti

解决方案


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


推荐阅读