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

mapping URL arguments in Python Requests redirect

同时使用 Routes library I want to redirect 某些 URL。文档说可以这样实现:

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

而且我确实可以通过这种方式重定向到 URL。但是我无法 map/parse 从请求到重定向的 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.

值的方法

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

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

我最终实现如下:

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