2013-01-11 64 views
8

我有一個名爲Item的DB表。項目擁有status屬性,可以是中重新導入Flask

new 
todo 
doing 
done 

在我的網站我有一個展示項目的表兩種觀點。

  • 查看1顯示全部項目(帶狀態欄)。
  • 查看2 只有顯示狀態爲todo的項目。

根據項目狀態,用戶可以執行某些操作(「轉移到待辦事項」,「移動到做」,「移動到完成」)。

如果您考慮查看1和查看2,它們都有共同之處,那就是它們包含狀態爲todo的項目。所以在兩個我有一個按鈕鏈接到一個URL稱爲

/Item/<id>/moveToDoing 

其中id - 項目的狀態設置爲「正在做」。

現在我想讓用戶重定向回他點擊按鈕(視圖1或視圖2)的位置。

我的問題是:

  1. 如何用瓶做到這一點?我覺得 http://flask.pocoo.org/snippets/62/不是我所需要的, ,因爲我在這裏沒有POST形式的請求。 (我應該嗎?)
  2. 我是這樣做的正確方法還是有關於如何正常解決這個約定?
+1

不適合你的問題,但爲什麼不設計你的網址到'/ item//moveto/' – greatghoul

回答

22

我使用的是這裏推薦的輔助函數:http://flask.pocoo.org/docs/reqcontext/

def redirect_url(default='index'): 
    return request.args.get('next') or \ 
      request.referrer or \ 
      url_for(default) 

使用它在視圖

def some_view(): 
    # some action 
    return redirect(redirect_url()) 

沒有任何參數,將用戶重定向回哪裏他來自(request.referrer)。 您可以添加get參數next來指定url。例如,這對oauth很有用。

instagram.authorize(callback=url_for(".oauth_authorized", 
               next=redirect_url(), 
               _external=True)) 

我還添加了一個默認視圖是否應該有某種原因

REDIRECT_URL(「 another_view」)

你基本上鍊接的代碼片段做同樣的,但通過確保更安全沒有引用您無法將其重定向到其他主機上的惡意攻擊者頁面。

+5

'request.referrer'是我需要一個簡單的後退按鈕/鏈接,謝謝! –