Python App Engine:使用app.yaml来控制url处理程序

时间:2012-07-06 18:56:17

标签: python google-app-engine

当我控制不同类型的页面时,我将代码移动到另一个python文件。但是这种方式有缺点:每次我想改变url hander时,我必须组装到main.py以配置关于url处理程序的底线。例如:

app = webapp2.WSGIApplication([('/', MainPage),
                               ('/thanks',ThanksHandler),
                               ('/unit2/signup',Signup),
                               ('/unit2/successful', LoginSuccess)], debug=True)

我尝试在app.yaml中配置处理程序以防止不利。

我在同一目录中添加文件blog.py,在此文件中,我有Blog类。这是我的blog.py文件:

class Blog(BaseHandler):
    def get(self):
        self.response.out.write("Hello")

app = webapp2.WSGIApplication([('/blog', Blog)], debug=True)

这是原始文件:

> handlers:
> - url: /favicon\.ico   static_files: favicon.ico   upload: favicon\.ico

- url: /.*   script: main.app

和这个新文件app.yaml

handlers:
- url: /favicon\.ico   static_files: favicon.ico   upload: favicon\.ico

- url: /blog/.*   script: blog.app

- url: /.*   script: main.app

但是当我转到:localhost:port / blog:404:找不到资源。

请帮帮我。

谢谢:)

1 个答案:

答案 0 :(得分:3)

yaml文件中的/blog/.* url规范与blog.py文件(/ blog)中的url规范不匹配。特别是/blog/.*要求url在博客之后有斜杠这一事实。例如,如果您在两个地方都使用/ blog它将起作用。或者你可以在两个地方使用/blog/.*。

url说明符按照它们在yaml文件中出现的顺序进行匹配,因此在这种特殊情况下/blog/.*在/ blog上不匹配但在最后一个匹配(真正捕获所有)/.*说明符因此,main.py处理程序将被加载并且无法匹配(main.py中的调用WSGIApplication构造函数中没有模式)。

希望这会有所帮助。 -Silviu