3

我正在尝试使用 python27 的谷歌应用引擎。

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

    - url: /hello
      script: helloworld.app

    - url: /.*
      script: main.app

helloworld.py 和 main.app 具有来自官方文档的相同代码,几乎没有区别(响应字符串)。

import webapp2
class MainHandler(webapp2.RequestHandler):
    def get(self):
        self.response.write('Hello world!!!')
app = webapp2.WSGIApplication([
    ('/', MainHandler)
], debug=True)

我的结果:1.“~”,响应来自“main.app”。2. "~/favicon.ico",响应来自"favicon.ico"。3.“~/hello”,响应为“404”。4.“~/something”,响应为“404”。

对不起,发布这个问题,“〜”为"http://localhost:8080"

为什么3和4不能处理?有什么不对?

4

1 回答 1

3

尝试更改('/', MainHandler)(r'/.*', MainHandler)r只是表示它是原始字符串)。问题是您目前除了 root 之外没有任何处理程序/,因此具有其他参数(例如http://localhost:8080/hello)的请求没有匹配的处理程序,因此不知道如何处理它。将处理程序更改为/.*意味着所有请求(无论根之后发生什么)都应路由到您的MainHandler.

至于文件中的app.yaml处理程序和处理程序,请将*.pyapp.yaml视为高级主管。它收到一个请求并简单地确定将它发送到哪里(我收到一个静态 Javascript 文件的请求吗?CSS?图片?或者这是一个应该为页面提供服务的请求,等等?)。在上述情况下,您希望它在访问任何不是/favicon(so /.*) 的 URL 时提供特定页面,因此它所做的就是接受任何请求/.*并将其路由到main.app您的main.py文件中的 (我是现在忽略helloworld.app,主要是因为在你的情况下你不一定需要它)。

然后进行更精细的处理——main.app接收原始请求,然后寻找特定的处理程序来执行代码。当我们将您的处理程序更改为 时r'/.*',它会匹配任何传入的内容(so //hello/helloworld等),并执行相应的 class MainHandler,在这种情况下)。

于 2013-04-11T16:56:20.030 回答