web.py框架 web.seeother VS web.redirect

       在網站開發中,會有一些頁面跳轉功能需求,好比登陸後跳轉到用戶的我的頁面,好比退出登陸後跳轉到登陸頁面。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.seeotherweb.redirect。通常狀況下建議使用web.seeother,而不是web.redirect,這兩種方式有什麼區別呢?瀏覽器

web.seeother返回的status code303 See Other緩存

wKiom1TUU1fDlggbAACrv921OfU882.jpg


web.redirect返回的status code301 Moved Permanently網絡

wKioL1TUVEXgZWbxAACZIvED3Xg517.jpg

那麼303 SeeOther301 MovedPermanently有什麼區別呢?app

 

這兩個狀態碼都是告訴客戶端:你請求的資源移到了別處,我給你資源的地址,你去那個地方找吧。不一樣的是:301是永久移動,303是暫時移動。ide

 

因爲咱們用的是瀏覽器,並體會不到這個過程。若是作網絡爬蟲開發,這些狀態碼就很重要了。對於狀態碼返回301的網頁,在記錄地址映射時,直接記錄新的Location便可,這樣就避免了一次沒必要要的請求,提升了請求效率。網站

 

對於服務端開發,應該多使用web.seeother,由於瀏覽器會緩存網頁。若是使用web.redirect,瀏覽器會忽略緩存,直接訪問網站。對於用戶體驗而言,是很差的。url

 

固然,有一種場景適合用web.redirect,即一般用戶在瀏覽器中會收藏一些網頁。爲了使用戶的收藏不失效,就要用web.redirectspa

相關文章
相關標籤/搜索