2012-08-13 186 views
1

有些URL只用於成功操作後重定向用戶。 (例如,在提交反饋後感謝您的網頁)。防止用戶直接訪問django中的重定向URL

問題是可以直接訪問這些頁面。

有沒有辦法來防止這種情況?

感謝

+1

來訪問,你可以[請從HTTP請求中檢查引用者](http://stackoverflow.com/a/4406484/344821)。 – Dougal 2012-08-13 22:06:39

+0

謝謝。但是我覺得這個水平太低了。我更喜歡不涉及查看HTTP標題的解決方案。 (例如django裝飾器?) – AmirW 2012-08-13 22:22:20

+0

當用戶試圖訪問這樣的頁面時,你期望什麼? – sergzach 2012-08-13 22:54:32

回答

2

網址是由視圖處理的,所以一定要確保的觀點僅是幸福的,如果它做的最後一件事是成功操作的登錄用戶。否則提出Http404。

只需在視圖中檢查用戶的會話變量即可。該邏輯是這樣的:

shop.html:用戶點擊「後」來buy.html

視圖buy.html賬單用戶,設置「剛買的東西」在會議上,重定向到thanks.html

view for thanks.html檢查'剛剛買了東西'會話變量,清除它(如果設置爲其他情況)404,並在成功時呈現模板到響應。

1

我建議the message framework這樣做。

+1

不錯的方向。這不是消息的預期用途。 AFAIK消息框架用於顯示消息,而不是在頁面之間傳遞一般信息。但我想我喜歡它:) – AmirW 2012-08-13 23:10:27

+0

@fabiocerqueira,我認爲,你的黑客是一個壞的。因爲如果在消息API中執行任何更改(這些不合格的黑客將不被考慮)導致代碼被破壞。作爲一個原則,它總是善於使用API​​的方式來實現它們的目標。 – unlockme 2016-08-22 09:46:38

1

你可以做一些事情的看法很簡單的像重定向如果用戶不提供特定的GET參數:

if not request.GET.get('show', False): 
    # do redirection 
else: 
    # render the page 

所以URL只能/my-url/?show=true