【问题标题】:How to reformat URLs to be more restful (from .../?id=123 to .../123)?如何重新格式化 URL 以更安静(从 .../?id=123 到 .../123)?
【发布时间】:2011-01-04 14:21:42
【问题描述】:

目前我有通过以下方式访问的页面:

www.foo.com/details.html?id=123

我想让它们更像安宁,例如通过以下方式:

www.foo.com/details/123

我正在使用 Google App Engine。目前 URL 映射在 html-mappings 文件中:

 ('/details.html*', DetailsPage),

然后在DetailsPage 处理程序上,它通过以下方式获取ID 值:

class DetailsPage(webapp.RequestHandler):
    def get(self):
        announcement_id = self.request.get("id")

我该如何重组它以便它可以映射 URL 并通过其他格式的 URL 提取 ID:www.foo.com/details/123

谢谢

【问题讨论】:

    标签: python google-app-engine url restful-url


    【解决方案1】:

    像这样重写你的 URL 映射:

    ('/details/(\d+)', DetailsPage),
    

    (这要求 URL 的尾随部分包含一个或多个数字,没有其他内容)。

    然后修改您的 DetailsPage::get() 方法以接受该 id 参数,例如:

    class DetailsPage(webapp.RequestHandler):
        def get(self, announcement_id):
            # next line no longer needed
            # announcement_id = self.request.get("id") 
    

    ...继续你的代码。

    【讨论】:

    • 太棒了!非常感谢!一个改变——我意识到我对描述有误导......如果我想在 /details 之后的 id 与正则表达式匹配怎么办:[a-zA-Z0-9-] 我怎样才能反映这种变化? ('/details/[a-zA-Z0-9-]', DetailsPage),似乎不起作用(它一直给我一个 404 错误)。
    • 为此您可以替换 r"/details/(\w+)" -- \w 匹配所有这些字符,+ 要求至少有一个匹配字符,并且括号将匹配捕获到参数中传递给您的 get() 函数。
    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多