【问题标题】:mapping URL arguments in Python Requests redirect在 Python 请求重定向中映射 URL 参数
【发布时间】:2016-12-09 16:01:01
【问题描述】:

在使用 Routes 库时,我想 redirect 某些 URL。文档说可以这样实现:

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 的值的方法。

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

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

【问题讨论】:

    标签: python routes url-routing url-redirection


    【解决方案1】:

    我最终实现如下:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 2023-01-05
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-01
      相关资源
      最近更新 更多