有些URL仅用于在成功操作后重定向用户。 (例如,在提交反馈后感谢您的页面。)
问题是这些页面可以直接访问。
有没有办法阻止这种情况?
由于
答案 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 的人。