1

在我的 django 站点中,我有一个类似的页面: fubar.com/signup 发布到自身,然后在成功时重定向到 fubar.com/thank-you(例如当有人注册该站点时)。我想强制执行一个规则,以防止页面在该人返回时一遍又一遍地重新加载。我正在使用该页面来跟踪转换,我的数字已关闭,因为人们可以(并且确实)点击后退按钮返回该页面。

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

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

4

2 回答 2

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 的回答更普遍正确(因为它确保每次转换将至少记录一次,只要用户在合理的时间范围内访问感谢页面),每次都会涉及到会话存储. 使用其中一个,或同时使用两者;)

于 2012-08-06T14:43:06.987 回答
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 %}

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

于 2012-08-06T10:47:25.030 回答