Google App Engine(Python)app.yaml urlhandler不起作用

bnemo 发布于 2019-03-09 app.yaml 最后更新 2019-03-09 14:42 10 浏览

我正在尝试与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.“~/你好”,回应是“404”。 4.“~/ something”,回应是“404”。 对不起,要发布这个问题,请在"http://localhost:8080"中输入“~”。 为什么3和4不能处理?有什么不对?
已邀请:

riure

赞同来自:

尝试将('/', MainHandler)更改为(r'/.', MainHandler)(r只表示它是原始字符串)。问题是,你目前没有比根/以外的其他任何处理,所以与其他参数的要求(如http://localhost:8080/hello)没有匹配的处理器,因此它是未知如何处理它。将处理程序更改为/.意味着所有请求(无论root之后的内容)都应该路由到您的MainHandler。 至于app.yaml处理程序和处理程序在你的.py文件,认为app.yaml作为高层主管。它获取一个请求并简单地确定将其发送到哪里(我是否收到了静态Javascript文件的请求?CSS?图片?或者这是一个应该为页面提供服务的请求等?)。在这种情况下,如你上面,你希望它击中不是/favicon(所以/.)的任何URL时,服务于特定页面,所以它的作用是花费/.和其路由到main.app任何要求,这是你的main.py文件(我现在忽略了helloworld.app,主要是因为在你的情况下你不一定需要它)。 然后,更精细的处理发生 - main.app接收原始请求,然后它查找执行代码的特定处理程序。当我们改变你的处理程序r'/.',它匹配任何东西来的(所以//hello/helloworld等),并执行相应的类MainHandler,在这种情况下)。