webapp2的get()方法何时采用其他参数?

时间:2014-01-04 15:04:24

标签: python google-app-engine webapp2

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

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

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

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

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

当我们请求相应的网址时,get()方法必须定义为

def get(self,post_id):

post_id是我们请求的网址末尾的ID。

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

1 个答案:

答案 0 :(得分:2)

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

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