在最後幾天,我看到了很多代碼,例如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'處理程序。 –