在最后几天,我看到了很多代码,例如GAE Boilerplate,几乎所有代码都使用路线来管理页面调用。我想知道为什么?官方的例子总是使用“正常”的方法: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
,但是对于路由,可以调用相同的作品,但是当完成一篇文章时,它只适用于表单动作为/register/
(最后一个斜杠)。
谢谢@Tomasz。我已阅读链接。只有2个注释:在某些情况下,似乎可以很好地使用(并检查)参数是否已经过去。例如,在'lang?hl = en_US'中,如果我没有找到它,我会抛出“Bad param”的消息。随着路线启动404错误。其次,根据strict_slash文档,调用'/ register'将重定向到'/ register /'。那么,为什么POST到'/ register'失败?但最后,调用'/ register'还是'/ register /'之间的区别,即为什么人们使用strict_slash? – Eagle
@Eagle正确,无论是“lang?hl = en_US”还是“/ lang/en_US”都没有错 - 这取决于你,这对你的特定情况更有意义。 –
@Eagle至于'POST'失败,(当你不清楚什么是和不能工作时),strict_slash'的效果是当请求的URL发出一个代码为“301”的响应(重定向)当预期有一个斜线时会丢失斜线,反之亦然。为'POST'发出重定向不是我期望在任何地方看到的模式,因为您应该已经使用最初的'GET'将浏览器重定向到正确的URL。这就是为什么我相信'webapp2.RedirectHandler'(webapp2的重定向实现的一部分)甚至没有实现'POST'处理程序。 –