在过去的几天里,我看到了很多代码,比如GAE样板,几乎所有的代码都使用路由来管理页面调用。我想知道为什么?官方的例子总是使用“正常”的方法:
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调用同样有效,但当post完成时,它只有在表单操作为/register/
(带有最后一个斜杠)时才有效。
发布于 2013-07-18 09:26:45
在原始webapp
之上引入的主要特性之一正是webapp2
类提供的功能的扩展。
文档很好地解释了它试图实现的目标:
webapp2引入了一种路由机制,该机制扩展了webapp模型以提供额外的功能:
归根结底,它们是更强大的路由版本,为程序员提供了更多的功能。
根据您的特定参数问题,您不需要以任何特定的方式传递lang
。在第一种情况下,lang
可以作为request.GET
的一部分,在第二种情况下,可以作为与请求方法(GET
,POST
)匹配的请求处理程序的方法的位置参数。
区别很大程度上在于,在/lang?hl=en_US
的情况下,参数在技术上是可选的。即使没有参数,您的请求仍将与处理程序匹配,因此您必须验证request.GET
是否包含数据。
在第二种情况下,/lang/en_US
只匹配路由,因此只有在<lang>
中有需要匹配的内容时才会调用处理程序。
根据斜杠问题,您在路由中使用了strict_slash
。more here
https://stackoverflow.com/questions/17719113
复制相似问题