在網站開發中,會有一些頁面跳轉功能需求,好比登陸後跳轉到用戶的我的頁面,好比退出登陸後跳轉到登陸頁面。python
在web.py中,使用web.seeother或者web.redriect就能夠實現這個功能。好比web
import web urls = ( '/hello', 'Index', '/welcome','Welcome' ) app = web.application(urls, globals()) render = web.template.render('templates/') class Welcome(object): def GET(self): return render.welcome(); class Index(object): def GET(self): return render.hello_form() def POST(self): raise web.seeother('/welcome') #raise web.redirect('/welcome') if __name__ == "__main__": app.run()
web.py的頁面跳轉有兩種實現方式:web.seeother和web.redirect。通常狀況下建議使用web.seeother,而不是web.redirect,這兩種方式有什麼區別呢?瀏覽器
web.seeother返回的status code是303 See Other:緩存
web.redirect返回的status code是301 Moved Permanently網絡
那麼303 SeeOther和301 MovedPermanently有什麼區別呢?app
這兩個狀態碼都是告訴客戶端:你請求的資源移到了別處,我給你資源的地址,你去那個地方找吧。不一樣的是:301是永久移動,303是暫時移動。ide
因爲咱們用的是瀏覽器,並體會不到這個過程。若是作網絡爬蟲開發,這些狀態碼就很重要了。對於狀態碼返回301的網頁,在記錄地址映射時,直接記錄新的Location便可,這樣就避免了一次沒必要要的請求,提升了請求效率。網站
對於服務端開發,應該多使用web.seeother,由於瀏覽器會緩存網頁。若是使用web.redirect,瀏覽器會忽略緩存,直接訪問網站。對於用戶體驗而言,是很差的。url
固然,有一種場景適合用web.redirect,即一般用戶在瀏覽器中會收藏一些網頁。爲了使用戶的收藏不失效,就要用web.redirect。spa