【问题标题】:Flask Redirect URLs escapingFlask 重定向 URL 转义
【发布时间】:2013-08-19 14:43:37
【问题描述】:

我正在尝试使用 Flask 重定向到 Graphite URL。我正在构建的石墨 URL 很复杂,必须包含文字字符 {、} 和 |。 Flask 正在将它们转义到 %7B %7C 和 %7D。

有什么办法可以阻止这种情况吗?在石墨方面,我想要一个看起来像这样的目标: sumSeries({metric|metric|metric})

@app.route("/")
def index():
  instances = get_data()
  url = build_graphite_url(instances)
  print url
  return redirect(url)

【问题讨论】:

标签: python flask graphite


【解决方案1】:

如果你深入研究 Flask 源代码,你最终会在 werkzeug 下的 wrappers.py 中遇到一个名为 get_wsgi_headers 的函数:See here

这个函数在最终响应被创建和返回时被调用,如果你向下滚动一点你会发现它会检查是否设置了位置标头,如果设置了,会进行一些自动更正以确保 url是绝对的。在这期间,它需要对url进行转义,这就是为什么你的URL被转义了。

据我所知,防止这种情况的唯一方法是修补 get_wsgi_headers 使其基本上不会转义某些字符,因为毕竟 Flask 是开源的 :)

另外作为旁注,您无法侦听 after_request 回调并修改响应标头的原因是因为 werkzeug 的 get_wsgi_headers 在回调之后被调用,所以无论如何您在回调中设置的位置最终也会被转义。

【讨论】:

    猜你喜欢
    • 2012-12-29
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2012-12-25
    相关资源
    最近更新 更多