有些 URL 仅用于在操作成功后重定向用户。(例如,提交反馈后的感谢页面)。
问题是这些页面可以直接访问。
有没有办法防止这种情况?
谢谢
URL 由视图处理,因此请确保视图仅在它所做的最后一件事是对登录用户的成功操作时才满意。否则引发 Http404。
只需在视图中检查用户的会话变量即可。逻辑类似于:
shop.html:用户点击“post”来购买.html
buy.html 视图向用户收费,在会话中设置“刚买了东西”,重定向到thanks.html
查看Thanks.html 检查“刚刚购买的东西”会话变量,如果设置为404,则将其清除,并在成功时为响应呈现模板。
我建议这样做的消息框架。
如果用户不提供特定的 GET 参数,您可以在视图中执行一些非常简单的操作,例如重定向:
if not request.GET.get('show', False):
# do redirection
else:
# render the page
所以该 URL 只能通过/my-url/?show=true
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', {})
在这里,我们假设如果没有引用者(无),则表示该人在浏览器中输入了 URL。