App Engine正则表达式问题引导URL到脚本和处理程序

1 投票
2 回答
1484 浏览
提问于 2025-04-16 04:41

我正在尝试把我的应用程序拆分成几个独立的脚本。这个过程的一部分是把API调用放到一个单独的文件里。但是,现在调用API的链接(比如 http://example.com/api/game/new)不再有效了。

我的app.yaml文件里包含了这些内容:

- url: /api.*
  script: api.py

看起来这个配置是正确的,因为这个设置可以正常工作:

def main():
    application = webapp.WSGIApplication([('/.*', TestPage)], debug=True)
    util.run_wsgi_app(application)

但是这个设置就不行:

def main():
    application = webapp.WSGIApplication([('/game/new$', CreateGame), 
                                          ('/game/(d+)$', GameHandler)],
                                          debug=True)
    util.run_wsgi_app(application)

2 个回答

2

我猜你是想把一些参数传递给你的处理程序。

试试这个。它会给你一些提示。

#!/usr/bin/env python

import wsgiref.handlers
from google.appengine.ext import webapp


class MyHandler(webapp.RequestHandler):
    def get(self, string=None):
        if string:
            self.response.out.write("Hello World!! %s" % string)
        else:
            self.response.out.write("Hello World!! (and no word)")


def main():
    app = webapp.WSGIApplication([
                    (r'/word/(\w+)/?$', MyHandler),
                    (r'.*', MyHandler),
                    ], debug=True)

    wsgiref.handlers.CGIHandler().run(app)


if __name__ == "__main__":
    main()

希望这能帮到你。加油!

3

在WSGI应用中,你使用的URL模式必须是完整的路径,比如说 /api/game/...。App Engine的基础设施会在app.yaml文件中使用正则表达式来处理请求的路由,但它不会根据这些正则表达式来修改请求的路径。

撰写回答