在我的django网站上,我有一个页面:fubar.com/signup,它会自动发布,然后在成功时重定向到fubar.com/thank-you(就像有人注册网站时一样)。我想强制执行一条规则,如果该人返回该规则,该规则将阻止该页面反复重新加载。我正在使用该页面来跟踪转化情况,我的号码已关闭,因为人们可以(并且确实)按下后退按钮返回该页面。
我考虑过检查来自HttpRequest.META的HTTP_REFERER属性,但我不确定它有多可靠(如果在不同的客户端中格式不同,或者根本没有提供)。
有没有标准的方法来做到这一点? HTTP_REFERER属性是否可靠?
答案 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的回答更普遍正确(因为它确保每次转换将至少记录一次,只要用户在合理的时间范围内访问感谢页面),它将涉及到会话命中每次存储。使用;)