【问题标题】:Cherrypy URLs with unknown application mount path具有未知应用程序挂载路径的 Cherrypy URL
【发布时间】:2017-05-11 04:03:32
【问题描述】:

我有一个由用户托管的 CherryPy 网络应用程序。通常,主应用程序是这样安装的:

cherrypy.tree.mount(root,
                    '/',
                    root.conf
                    )

但是,为了让它在 nginx 等反向代理之后工作,它需要能够挂载到其他地方,无论用户选择什么路径:

mount = '/my_application'
cherrypy.tree.mount(root,
                    mount,
                    root.conf
                    )

mount 可以是用户选择的任何东西。

现在的问题是链接坏了。

raise cherrypy.HTTPRedirect("/news")

不再有效。当我需要重定向到 address:port/my_application/news 时,它会重定向到 address:port/news。

我可以为每个应用程序路径前面的 url 创建一个条件:

if mount != '/':
    url = mount + '/news'
raise cherrypy.HTTPRedirect(url)

但必须有更好的方法来做到这一点。我查看了 Request Dispatching 但我无法让它即时重写 url。

处理这种情况的最佳方法是什么?

【问题讨论】:

    标签: python-2.7 url-routing cherrypy


    【解决方案1】:

    您可以使用辅助函数cherrypy.url 生成相对于script_name (/my_application) 的url。

    你最终会得到类似的东西:

    raise cherrypy.HTTPRedirect(cherrypy.url('/news'))
    

    cherrypy.url 来源的链接:https://github.com/cherrypy/cherrypy/blob/master/cherrypy/_helper.py#L194

    【讨论】:

    • 是的,我希望我不必通过所有模板和 js 脚本来修改每个 url,但看起来这是唯一的方法。
    • 不允许我编辑,但感谢您的指点。非常感谢。
    • 是的,据我所知,这是唯一的方法。
    • 我写了一个丑陋的 url_for 实现,它试图收集应用程序中的所有 URL 并提供它们的解析。这里的挑战是可能有很多自定义调度程序在进行疯狂的 URI 转换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2022-07-17
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多