在 CherryPy 调度程序中,获取包含查询字符串的原始路径

In a CherryPy dispatcher, get the original path including the query string

我有一个带有自定义调度程序的 CherryPy 应用程序,继承自 cherrypy._cpdispatch.Dispatcher。在它的方法def __call__(self, path): ...中,我可以得到请求的路径作为参数pathpath 不包含查询字符串,cherrypy.url 也不包含。我发现我可以单独获取查询字符串 cherrypy.request.query_string。当然,如果我在调度程序中提出重定向,例如

raise cherrypy.HTTPRedirect(transform(path), 301)

然后查询字符串丢失。

我想在重定向后保留查询字符串。有没有办法获取原始路径或 URL,包括查询字符串?如果不是,我应该用 path + (if query_string then '?' + query_string else '') 之类的东西重建它,还是有更好的方法来做到这一点?

我意识到 cherrypy.url 有一些有用的参数。

  • 要获得完整的 URL,如 "http://example.com/foo/bar?arg=1",请说 cherrypy.url(qs = cherrypy.request.query_string)
  • 要获取完整的服务器相对路径,如 "/foo/bar?arg=1",请说 cherrypy.url(qs = cherrypy.request.query_string, relative = "server").