阻止用户直接访问django中的重定向URL

时间:2012-08-13 22:05:34

标签: django

有些URL仅用于在成功操作后重定向用户。 (例如,在提交反馈后感谢您的页面。)

问题是这些页面可以直接访问。

有没有办法阻止这种情况?

由于

4 个答案:

答案 0 :(得分:3)

URL由视图处理,因此请确保视图仅在其执行的最后操作是登录用户的成功操作时才会满意。否则提高Http404。

只需在视图中检查用户的会话变量即可。逻辑如下:

shop.html:用户点击'post'到buy.html

查看buy.html向用户开账单,在会话中设置'刚买的东西',重定向到thanks.html

查看thanks.html检查“刚购买的东西”会话变量,如果另外设置404则清除它,并在成功时将模板呈现给响应。

答案 1 :(得分:1)

我建议the message framework这样做。

答案 2 :(得分:1)

如果用户没有提供特定的GET参数,您可以在视图中执行非常简单的操作,例如重定向:

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

因此只能使用/my-url/?show=true

访问该网址

答案 3 :(得分:0)

def get_referer(request):
    referer = request.META.get('HTTP_REFERER')
    if not referer:
        return None
    return referer

然后在任何视图中:

def my_view(request):
    if not get_referer(request):
        raise Http404
    return render(request, 'sample.html', {})

这里我们假设如果没有引用者 (None),则表示在浏览器中输入 URL 的人。