在 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
name
和 changeset_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
同时使用 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
name
和 changeset_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