允许页面仅在django中加载一次

时间:2012-08-05 19:48:57

标签: django http-referer

在我的django网站上,我有一个页面:fubar.com/signup,它会自动发布,然后在成功时重定向到fubar.com/thank-you(就像有人注册网站时一样)。我想强制执行一条规则,如果该人返回该规则,该规则将阻止该页面反复重新加载。我正在使用该页面来跟踪转化情况,我的号码已关闭,因为人们可以(并且确实)按下后退按钮返回该页面。

我考虑过检查来自HttpRequest.META的HTTP_REFERER属性,但我不确定它有多可靠(如果在不同的客户端中格式不同,或者根本没有提供)。

有没有标准的方法来做到这一点? HTTP_REFERER属性是否可靠?

2 个答案:

答案 0 :(得分:1)

一种可能的解决方案是在用户的会话中存储一个值 假设每个页面都有一个单独的视图,这应该很容易。

在成功注册(重定向之前)后,在注册视图中设置会话变量:

request.session['conversion'] = True

然后在感谢页面中将值添加到上下文中:

return direct_to_template(request, template_name, {
    'conversion': request.session.pop('conversion', False),
})

然后,您只需将转换跟踪代码包装在模板中的if语句中:

{% if conversion %}
    {# Conversion tracking script #}
{% endif %}

我认为这比检查推荐人更可靠。

答案 1 :(得分:1)

检查HTTP_REFERER非常可靠;检查您视图中的引荐来源:

data = {
    'foo': 'bar',
    ...
}
if request.META.get('HTTP_REFERER', False) == reverse('signup'):
    data.update({'conversion': True})
render(request, 'thanks.html', data)

然后在模板中使用该信息来确定是否检测转换:

{% if conversion %}<script type='text/javascript'> // record conversion</script>{% endif %}

虽然Yuri的回答更普遍正确(因为它确保每次转换将至少记录一次,只要用户在合理的时间范围内访问感谢页面),它将涉及到会话命中每次存储。使用;)

之一或两者