请考虑以下代码:
class Activate(BaseHandler):
def get(self, key):
self.response.out.write(key)
application = webapp2.WSGIApplication([('/activationlink/([^/]+)?', Activate)],debug=True,config=config)
我想知道处理程序如何“知道”/ activationlink /之后的部分实际上是关键字?是模式/字符串/ string2的每个URL都将key = string2发送给处理程序吗?如果是这样,它是否在webapp2.RequestHandler类中设置?
答案 0 :(得分:0)
来自webapp2中的简单路线部分URI routing:
class ProductHandler(webapp2.RequestHandler): def get(self, product_id): self.response.write('This is the ProductHandler. ' 'The product id is %s' % product_id) app = webapp2.WSGIApplication([ (r'/', HomeHandler), (r'/products', ProductListHandler), (r'/products/(\d+)', ProductHandler), ])
...
正则表达式部分是一个普通的正则表达式(参见re模块) 可以在括号内定义组。匹配的组值 作为位置参数传递给处理程序。在示例中 上面,最后一个路由定义了一个组,因此处理程序将接收到 路由匹配时匹配的值(此处的一个或多个数字) 情况)。
在您的情况下,([^/]+)
是相关的正则表达式组,它将匹配的内容转换为传递给key
的{{1}}。
答案 1 :(得分:0)
看一下这个例子:
class ProductHandler(webapp2.RequestHandler):
def get(self, product_id):
self.response.write('You requested product %r.' % product_id)
app = webapp2.WSGIApplication([
(r'/products/(\d+)', ProductHandler),
])
处理程序方法接收从URI中提取的product_id
,并设置包含id作为响应的简单消息。
如您所见,\d+
定义我们发送一个正整数。
参数是位置的。所以,如果你这样做:
...
(r'/products/(\d+)/(\d+)', ProductHandler)
...
你的方法必须接收这些参数(按照网址的顺序),如下所示:
...
def get(self, param1, param2):
...
如果您想了解更多信息,请阅读以下文档:
希望这会对你有所帮助。