GAE:路线与标准

时间:2013-07-18 09:06:46

标签: python google-app-engine routes

在最后几天,我看到很多代码,比如GAE Boilerplate,几乎所有代码都使用Routes来管理页面调用。而我想知道为什么?官方示例始终使用“常规”方法:

app = webapp2.WSGIApplication([('/', MainPage),
                               ('/lang', ChangeLanguage)], debug=True)

但现在我发现了这个替代方案:

from webapp2_extras.routes import RedirectRoute

RedirectRoute('/lang/<lang>', ChangeLanguage, name='lang', strict_slash=True),
RedirectRoute('/', MainPage, name='home', strict_slash=True)

在第一种情况下,我使用参数在请求上传递我的变量(如/lang?hl=en_US),在第二种情况下,我必须将其作为路径传递(如/lang/en_US)。

但为什么要使用一种方法呢?有什么优势吗?

另外,我注意到第一种方法可以在get和put方法中调用我的表单,例如/register,但是对于路由,可以调用相同的get,但是当一个帖子时已完成,它仅在表单操作为/register/(最后一个斜杠)时才有效。

1 个答案:

答案 0 :(得分:3)

原始webapp2引入的一个主要功能webapp正是Route类提供的功能扩展。

该文档对其尝试实现的目标给出了很好的解释:

  

webapp2引入了一种扩展webapp模型的路由机制,以提供其他功能:

     
      
  • URI构建:可以在需要时构建已注册的路由,从而避免在应用程序代码和模板中使用硬编码的URI。如果在开发期间以兼容的方式更改路由定义,则使用该路由的所有位置将继续指向正确的URI。这样不容易出错,也更容易维护。

  •   
  • 关键字参数:处理程序可以从匹配的URI中接收关键字参数。这比位置参数更容易使用,也更容易管理。

  •   
  • 嵌套路由:可以扩展路由以匹配多于请求路径。我们将在下面看到一个也可以匹配域和子域的路由类。

  •   
     

Source

最重要的是,它们是更强大的路由版本,为程序员提供了更多功能。


根据您的具体参数问题,您无需以任何特定方式传递lang。在第一种情况下,lang将作为request.GET的一部分提供,在第二种情况下,作为请求处理程序的方法的位置参数,与请求方法匹配(GET,{{1 }})。

差别很大,在POST的情况下,参数在技术上是可选的。即使参数不存在,您的请求仍将与处理程序匹配,因此您必须验证/lang?hl=en_US是否包含数据。

在第二种情况下,request.GET,路由仅匹配,因此只有在匹配/lang/en_US时才会调用处理程序。


根据斜杠问题,您在路线中使用<lang>more here

相关问题