【问题标题】:Python App Engine : use app.yaml to control url handlerPython App Engine:使用 app.yaml 控制 url 处理程序
【发布时间】:2012-07-07 04:33:35
【问题描述】:

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

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

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

我在同一目录中添加文件blog.py,在这个文件中,我有博客类。这是我的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: resource not found.

请帮帮我。

谢谢:)

【问题讨论】:

  • 把你的/.*处理程序放在最后;匹配一切。
  • @Wooble 更改后,我仍然看到找不到资源。你能看看:url: /blog/.* script: blog.app,这个 url 处理程序对于链接 localhost/blog 是否正确?

标签: python google-app-engine


【解决方案1】:

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

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

希望这会有所帮助。 -西尔维

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 2017-02-02
    • 2020-03-19
    • 2019-09-17
    • 2013-10-13
    • 2014-02-06
    • 2019-05-07
    • 2019-10-18
    • 2023-03-11
    相关资源
    最近更新 更多