2012-08-13 203 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