GAE中的Python正则表达式

时间:2016-02-05 04:14:46

标签: python regex google-app-engine webapp2

我试图更新我的webapp2路由器,在某些情况下将我带到另一个处理程序,这就是我所拥有的:

地址:" * .com / blog / post?action = edit& id = fl2j3r0udflj3"

为了保持简单,我想在/ blog / post上匹配?action = edit

我有这个:

app = webapp2.WSGIApplication([
    ('/',Redirect),
    (r'/blog/post?(\S+)', blog.EditPost),
    ('/blog/post', NewPost),
....

不起作用。

我尝试了几种不同的东西,比如

  1. (' r / blog / post \?action = edit',blog.EditPost)
  2. (' r / blog / post \?action = edit(。* +)',blog.EditPost)
  3. 什么都没有用。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

tl; dr:如果你想维护你的网址结构,你的'/ blog / post'处理程序将需要根据状态参数及其值进一步调度。

这是其中一种情况之一,在谈论URL时,先了解“路径”的含义是有帮助的。具体而言,该参数不是路径的一部分。

通过深入研究SDK源代码也可以解决这个问题,目的是回答“在匹配路由时考虑URL的哪一部分?”的问题。

webapp2webob之上提供了功能。 webapp2.WSGIApplication为传递给webapp2.SimpleRoute构造函数的路由构建WSGIApplication列表。 SimpleRoute“匹配”基于request.path,这是webob.Requestwebapp2.Request子类)提供的请求中的属性。 path属性以

开头
    @property
    def path(self):
        """The path of the request, without host or query string"""

最终意味着查询字符串不能通过路由匹配。 (您可以深入挖掘代码以确认。)