在Python请求重定向中映射URL参数

时间:2016-08-03 19:16:27

标签: python routes url-routing url-redirection

在使用Routes库时我想redirect某些网址。文档说它可以像这样实现:

map.redirect("/legacyapp/archives/{url:.*}", "/archives/{url}")

我确实能够以这种方式重定向到URL。但是,我无法将请求中的URL参数映射/解析到重定向。我的代码如下所示:

app.mapper.redirect( "/repository/status_for_installed_repository{url:.*}", "/api/repositories/check_updates/{url}" )

如果应用程序通过了这个:

curl -L 'FQDN/repository/status_for_installed_repository?owner=qqqqqq&changeset_revision=e5f6ced3e91f&name=asdsadsadas'

它将我重定向到

GET /api/repositories/check_updates

但我无法找到如何获取owner namechangeset_revision的值的方法。

我希望这是一个常见的用例,因为通常你不想在重定向时丢失参数?

非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

我最终实现如下:

def _map_redirects( app ):
    """
    Add redirect to the Routes mapper and forward the received query string.
    Subsequently when the redirect is triggered in Routes middleware the request
    will not even reach the webapp.
    """
    def forward_qs(environ, result):
        qs_dict = urlparse.parse_qs(environ['QUERY_STRING'])
        for qs in qs_dict:
            result[ qs ] = qs_dict[ qs ]
        return True

    app.mapper.redirect( "/repository/status_for_installed_repository", "/api/repositories/check_updates/", _redirect_code="301 Moved Permanently", conditions=dict( function=forward_qs ) )
    return app