【问题标题】:When does the get() method of webapp2 take additional arguments?webapp2 的 get() 方法什么时候需要额外的参数?
【发布时间】:2014-01-04 15:04:24
【问题描述】:

我刚刚开始使用 Google App Engine 和 webapp2 成名系统。通常,我们从以下代码开始构建应用程序

class MainPage(webapp2.RequestHandler):
    def get(self):
        #do something

app = webapp2.WSGIApplication([('/blog',MainPage)])

现在有时当我们像这样注册处理程序时

app = webapp2.WSGIApplication([('/blog/(\d+)',MainPage)]

当我们请求相应的 URL 时,get() 方法必须像这样定义

def get(self,post_id):

post_id 是我们请求的 URL 末尾的 id。

现在我不明白 get() 方法在这种情况下何时接受像 post_id 这样的附加参数?我的意思是,所有正则表达式 (\d+) 都说如果 URL 以数字结尾,则将其映射到 MainPage 处理程序。那么webapp2 何时知道何时将参数/参数发送到MainPage 处理程序的get() 函数?

【问题讨论】:

标签: python google-app-engine webapp2


【解决方案1】:

该模式作为正则表达式与 URL 匹配,模式中的括号构成一个“捕获组”,这意味着与该模式的该部分匹配的 URL 部分是“捕获”的。就目前而言,捕获组是匿名的,传递给处理程序的参数是按位置完成的(您不必将其称为post_id)。将模式更改为 (?P<post_id>\d+) 使其成为“命名”组,处理程序的参数将是关键字参数(参数的名称很重要)。

为了完整起见,如果您希望正则表达式中的某个组不被捕获(因此不作为参数传递),则将其表示为 (?:\d+)

【讨论】:

    猜你喜欢
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2014-12-13
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多