Google App Engine 重写问题
我想知道怎么把这个网址改写成另一个格式:
变成:
这是我写的代码,但它没有正常工作:
class MainPage(webapp.RequestHandler):
def get(self, page):
mypage = self.request.get('page')
self.response.headers['Content-Type'] = 'text/plain'
if mypage == "":
self.response.out.write('Hello, webapp World!')
else:
self.response.out.write('page is ' + mypage)
application = webapp.WSGIApplication([('/', MainPage),('/(\d+)', MainPage)], debug=True)
3 个回答
1
你为你的 MainPage
处理器定义了两个路径,一个是没有参数的路径 ('/'),另一个是带有一个参数的路径 ('/(\d+)')。但是,你的处理器实际上需要一个名为 page
的参数。
所以,你要么需要使用两个不同的处理器,要么给 page
参数设置一个默认值,像这样:
class MainPage(webapp.RequestHandler):
def get(self, page=None):
if not page:
self.redirect('/%s', self.request.get('page'))
return
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write('page is ' + mypage)
另外,以后如果你遇到错误信息(stacktrace),记得把它放在你的提问里!仅仅说“它不工作”让我们去猜到底出了什么问题,这样不容易得到有用的答案。
1
假设你正在使用网页应用:
class Rewriter(webapp.RequestHandler):
def get(self):
self.redirect(self.request.get('page'))
application = webapp.WSGIApplication([('/', Rewriter)],)
def main():
run_wsgi_app(application)
if __name__ == "__main__":
main()
4
你可以在你的控制器中使用正则表达式。这并不是严格意义上的Apache风格的URL重写,但它能完成任务。重写后的参数会作为一个参数传递给处理程序。
class MyRequestHandler(webapp.RequestHandler):
def get(self, page):
self.response.headers['Content-Type'] = 'text/plain'
if not page:
self.response.out.write('Hello, webapp World!')
else:
self.response.out.write('page is ' + page)
url_map = [('/(\d+)', MyRequestHandler)]
application = webapp.WSGIApplication(url_map, debug=True)
可以参考 如何配置app.yaml以支持类似/user/<user-id>的URL?,了解类似的应用。